【问题标题】:C# - JObject.Parse - Invalid JSONC# - JObject.Parse - 无效的 JSON
【发布时间】:2015-03-19 13:28:48
【问题描述】:

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

【问题讨论】:

  • 好吧,API 没有返回有效的 JSON。我建议您与开发人员交谈并让它返回有效的 JSON...

标签: c# json wcf json.net


【解决方案1】:

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

【讨论】:

  • 感谢您的解决,我需要一些快速的东西,我将继续与开发人员交谈,只是等不及他们修复了。
  • 没问题;很高兴我能帮上忙。
猜你喜欢
  • 2018-02-28
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 2014-07-01
相关资源
最近更新 更多