C# – JObject.Parse – 无效的JSON

我正在使用返回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()) { Console.WriteLine("AnimalId: " + item["AnimalId"]); Console.WriteLine("SpeciesCode: " + item["SpeciesCode"]); }