当前位置: 首页 > 面试题库 >

C#-JObject.Parse-无效的JSON

吕华彩
2023-03-14
问题内容

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


 类似资料:
  • 本文向大家介绍删除C ++中的无效括号,包括了删除C ++中的无效括号的使用技巧和注意事项,需要的朋友参考一下 假设我们有一串括号。我们必须删除最少数量的无效括号并返回格式正确的括号字符串,因此,如果输入类似于“()(()()”,那么结果将是[“()()()”,“( )(())”] 为了解决这个问题,我们将遵循以下步骤- 定义一个名为solve()的方法,它将接受pos、left、right、l、

  • 背景: 我有C背景,刚开始在嵌入式项目中使用C++。 我编写了一个能够处理多个设备的固件,具体取决于最终用户获得设备之前如何通过图形界面配置固件。 每个设备类型由一个类表示。 许多参数在多个(但不是所有)类型的器件之间共享(即电池电平),一些功能也共享(即从EEPROM读取特定于器件类型的内容)。 目标: 能够通过指针访问函数和变量,而不必不断转换void指针。 在调用函数之前,我不应该知道我使用

  • 本文向大家介绍C ++程序中的迭代器无效,包括了C ++程序中的迭代器无效的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的迭代器失效。 在容器对象的元素上进行迭代时,有时如果我们不应用绑定检查,它可能会失效。这主要是由于容器对象的形状和大小的变化而发生的。 示例 输出结果 (可能还会发生,添加新元素时,矢量将被复制到新位置,而我们的迭代器仍指向旧位置,这

  • 我正在开发一个使用WPF和WinForms作为UI的遗留应用程序。WPF弥补了绝大多数,但是应用程序的主对话框仍然在WinForms中。 到目前为止,我已经能够让它们很好地协同工作(多亏了System.windows.forms.integration.elementhost),但我无法让WPF窗口以它们的WinForms父窗口为中心。 OwnershipHelper(摘自https://stac

  • 下面的代码片段中的的目的是什么?

  • 最受欢迎的C迭代器失效规则帖子声称,不清楚过去的结束迭代器(即,、、、和)是否根据与普通迭代器相同的规则失效,这些迭代器指向容器中的元素。这些针对2003年和2011年C版的声明都遵从了一篇讨论结束迭代器失效规则的帖子,其中公认的答案表明2003年的标准在这个问题上是模糊的。这一结论基于23.1/10(在的上下文中)中的一条评论,该评论似乎暗示,当规范没有明确提到结束迭代器失效时,它们可能会失效。