我有一个类似JSON的字符串
string str = [{"a":"b"},{"c":"d"}],
我使用以下代码将其转换为Jarray,
JArray obj=JArray.Parse(str);
它工作正常,但是我的输入字符串更改为
str=[{"a":"b"},{"c":"d"}],[{"e":"f"},{"g":"h"}]
现在,JArray解析将其作为JArray列表抛出一个错误,我如何在C#中解析上述字符串?
答案 0 :(得分:0)
我能够找到一种使用JsonReader.SupportMultipleContent解析以下字符串的方法:
[{“ a”:“ b”},{“ c”:“ d”}],[{“ e”:“ f”},{“ g”:“ h”}]
感谢@dbc向我指出正确的方向(请参见Additional text encountered after finished reading JSON content)。 请注意,此功能仅从Json.NET的11.0.1版本起可用。
以下方法使用JsonTextReader
并返回IEnumerable<KeyValuePair<string, string>>
:
private static IEnumerable<KeyValuePair<string, string>> ParseKeyValuePairs(string json)
{
using (var reader = new StringReader(json))
using (var jsonReader = new JsonTextReader(reader) { SupportMultipleContent = true })
{
JsonSerializer serializer = JsonSerializer.CreateDefault();
while (jsonReader.Read())
{
if (jsonReader.TokenType == JsonToken.Comment)
{
continue;
}
var dictionaries = serializer.Deserialize<List<Dictionary<string, string>>>(jsonReader);
foreach (KeyValuePair<string, string> keyValue in dictionaries.SelectMany(x => x))
{
yield return keyValue;
}
}
}
}
使用代码生成Dictionary<string, string>
:
string json = @"[{""a"":""b""},{""c"":""d""}],[{""e"":""f""},{""g"":""h""}]";
Dictionary<string, string> data = ParseKeyValuePairs(json).ToDictionary(x => x.Key, x => x.Value);
结果: