C# - JObject.Parse - 无效的JSON

时间:2015-03-19 13:28:48

标签: c# json wcf json.net

我正在使用返回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"];
}

1 个答案:

答案 0 :(得分:3)

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"]);
}