我正在使用一个返回JSON的API。
我有一个方法,它调用api,并为所需的节点解析JSON响应。
到目前为止,除了最新的JSON响应格式错误外,一切都很正常。
其他回复如下:
{
"Keyword":""marhope"",
"TermKey":null,
"Customers":[
{
"Memberships":[ ],
"CompanyId":0,
"ObjectId":112974,
"ObjectType":"Customer",
}
]
}
我使用JObject.Parse按名称返回适当的节点。
最新的JSON响应返回为:
{
[
{
"AnimalId":9079117,
"SpeciesCode":"XX",
}
]
}
正如您所看到的,没有"名称",JSON稍微无效。
我该如何解析。对于第一个例子,我使用了下面的代码,但现在JSON没有"名称",我不知道如何处理这个问题,想法是什么?
JObject results = JObject.Parse(csr.SearchCustomer(1, 1, 870, term));
foreach (var resp in results["Customers"])
{
string obj = (string)resp["CompanyId"];
}
Jon Skeet是正确的,第二个JSON是无效的:不能在没有属性名的对象中直接有数组。最好的做法是让API开发人员修复JSON。然而,如果您只是在寻找一个快速而肮脏的解决方法,您可以从无效的JSON中去掉第一个和最后一个大括号,然后使用JArray.Parse
将其解析为数组。
string json = @"{
[
{
""AnimalId"":9079117,
""SpeciesCode"":""XX"",
}
]
}";
json = json.Substring(1, json.Length - 2);
JArray array = JArray.Parse(json);
foreach (JObject item in array.Children<JObject>())
{
Console.WriteLine("AnimalId: " + item["AnimalId"]);
Console.WriteLine("SpeciesCode: " + item["SpeciesCode"]);
}