解析动态命名的 JSON 对象最有效的方法是什么?

2023-12-11

我正在尝试解析一个 JSON 响应,其中包含一些我不太熟悉的内容,而且我也没有经常在野外见过。

在其中一个 JSON 对象内部,有一个动态命名的 JSON 对象。

在这个例子中,里面有一个JSON对象"bugs" named "12345"这与错误编号相关。

{
   "bugs" : {
      "12345" : {
         "comments" : [
            {
               "id" : 1,
               "text" : "Description 1"
            },
            {
               "id" : 2,
               "text" : "Description 2"
            }
         ]
      }
   }
}

我好奇的是:解析这样的动态命名 JSON 对象最有效的方法是什么?

给定一些 JSON 实用工具,例如

  • http://jsonutils.com/
  • http://json2csharp.com/

他们将采用像上面这样的 JSON 响应,并将其变形为如下所示的类:

jsonutils

public class Comment
{
    public int id { get; set; }
    public string text { get; set; }
}

public class 12345
{
    public IList<Comment> comments { get; set; }
}

public class Bugs
{
    public 12345 12345 { get; set; }
}

public class Root
{
    public Bugs bugs { get; set; }
}

json2csharp

public class Comment
{
    public int id { get; set; }
    public string text { get; set; }
}

public class __invalid_type__12345
{
    public List<Comment> comments { get; set; }
}

public class Bugs
{
    public __invalid_type__12345 __invalid_name__12345 { get; set; }
}

public class RootObject
{
    public Bugs bugs { get; set; }
}

问题在于它会生成一个class具有动态名称。因此,对该 API 的其他标识符的后续查询将导致失败,因为名称不匹配,也不会生成[JsonProperty("")]因为它将包含上面生成的示例中的动态类名称。

尽管 JSON 是有效的,但这似乎是这种格式的 JSON 的限制。不幸的是,我对此 JSON API 没有任何控制权,所以我很好奇解决这个问题的最佳方法是什么?


尝试 Json.NET,可作为 Nuget 包 (Newtonsoft.Json) 或从http://www.newtonsoft.com/json.

Json.NET 可以执行基于类的序列化/反序列化,如您所示。它还为 Json 格式未知或在开发时未固定的情况提供通用 JObject 和 JToken 类。

下面是从文件加载 json 对象的示例。

// load file into a JObject
JObject document;
using (var fileStream = File.OpenRead(someFilePath))
using (var streamReader = new StreamReader(fileStream))
using (var jsonReader = new JsonTextReader(streamReader))
    document = JObject.Load(jsonReader);

// read the JObject
var bugs = (JObject) document["bugs"];
foreach (var bugEntry in bugs)
{
    var bugID = bugEntry.Key;
    var bugData = (JObject) bugEntry.Value;
    var comments = (JArray) bugData["comments"];
    foreach (JObject comment in comments)
        Debug.Print(comment["text"]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析动态命名的 JSON 对象最有效的方法是什么? 的相关文章

随机推荐

  • 在 t-sql 中获取每隔一行作为结果表

    我正在寻找一个返回列表的 t sql 脚本 该列表显示 Table1 分组中的每个第二值 例如 我有以下数据 表1 并想要所需的结果列表 Table1 Customer Quantity A 5 A 8 B 3 B 5 B 11 C 7 D
  • 在我的应用程序中全局改变滚动条的宽度

    我有一个在触摸屏计算机上运行的 WPF 应用程序 我想将应用程序中的所有滚动条更改得更宽 有没有办法在全球范围内做到这一点 你必须override the default template of scrollViewer增加垂直滚动条的宽度
  • 从 difflib 中获取更细粒度的差异(或者通过后处理差异来实现相同目的的方法)

    正在下载this页面并对其进行较小的编辑 更改第一个65在本段中68 然后我解析两个来源美丽汤并将它们与difflib url https secure ssa gov apps10 reference nsf links 02092016
  • 以 S+(版本 31 及更高版本)为目标需要在存在意图过滤器时定义 android:exported 的显式值]

    在 Android 12 中调试应用程序时 应用程序崩溃了 Android 12 要求您在主要 Activity 中添加一段代码 转到您的项目文件夹并打开 AndroidManifest xml 文件 在活动中添加以下代码 android
  • Rails edit.html.erb 参数错误

    作为 Rails 新手 我浏览了 Hartl 教程并尝试进行一些更改 我想允许用户编辑帖子 我称之为路线 并且当我去编辑路线时收到此错误 else object record is a Array record last record ra
  • 需要使用 get_the_tag_list($ID) WordPress 的帮助

    我正在制作一个新的 WordPress 模板 我只想以文本格式获取与帖子关联的标签列表 我在用 get the tag list id 但问题是它返回 URL 和文本 有没有办法只获取附加到帖子的标签的 文本 并用逗号分隔 i e 标签1
  • 如何在 Bootstrap 中使用间距实用程序类

    In this article我看到了 Bootstrap 4 Spacing Utility Classes 他使用m b lg in className div class row div class col sm 6 m b lg d
  • 具有不同布局的 RecyclerView.ViewHolders 中的 Android DataBinding

    我正在尝试在新项目中使用 androids 数据绑定功能 到目前为止我对此非常满意 但现在我在我的 recyclerviews viewholder 中遇到了一个问题 我的视图持有者使用不同的布局 基于创建时的视图类型 public Med
  • 访问临时内存中用户上传的视频时出现问题

    我正在尝试使用 html 输入类型将用户上传的视频提交到 youtubefile和 python 模块 youtube upload 提交表单后 处理方式如下 if request method POST video request FIL
  • Tensorflow Lite,图像大小零误差

    其实我的问题很简单 我想在tensorflow lite模型中使用我自己的数据 所以 我写了这行代码 root path r C Users 90531 Desktop dataset b image path os path join o
  • 用java抓取一个angularjs网站

    我需要抓取一个由 Angular 插入 内容的网站 而且需要用java来完成 我尝试过 Selenium Webdriver 因为我之前使用过 Selenium 来抓取动态性较低的网页 但我不知道如何处理 Angular 部分 除了页面头部
  • 命名空间命名约定

    对于那些编写可重用组件的人来说 如果要扩展 NET 框架的功能 您认为最佳实践是什么 例如 我目前正在创建一个 Pop3 库 因为 NET 中不存在该库 我是创建自定义命名空间还是使用System Net Mail 来自命名空间命名指南 命
  • 删除Python中每个元素的换行符

    我打开一个文本文件 现在文本文件中的每个元素都用换行符分隔 当我使用readlines 它将这个换行符保留在列表中 这是在每个元素之后 所以它看起来像这样 zebra n ant n 我想知道是否有一个简单的函数或代码片段可以用来删除该换行
  • 安装应用程序后,拖放不再起作用

    我有一个具有拖放功能来导入图像和视频的应用程序 在通过 Visual Studio 进行开发和测试时 从未出现过任何问题 通过设置项目安装后 应用程序中的所有内容都工作正常 除了拖放之外 这似乎什么也没做 是否有任何安全设置需要通过安装程序
  • java:单套接字读写操作。全双工

    我必须实现使用特定源端口发送数据 同时监听该端口 全双工 有谁知道如何在java上实现它 我尝试创建单独的线程来侦听套接字输入流 但它不起作用 我无法将 ServerSocket 和客户端套接字绑定到相同的源端口 并且与 netty 相同
  • 将具有固定大小数组的 C++ 结构编组到 C# 中

    我有一个 C 结构声明如下 public struct AdvertisementData public byte SomeId MarshalAs UnmanagedType LPArray SizeConst 12 public byt
  • 选择每组中的前三个值

    以下是我的示例表和行 create table com company text val int insert into com values com1 1 com1 2 com1 3 com1 4 com1 5 insert into c
  • 如何检查消息是否由特定用户发送discord.py

    我正在使用 Discord py 来制作我的 Discord 机器人 当有人输入消息时 我想检查用户是否是 foo 3645 然后执行某些操作 如果不是 则执行其他操作 if messageAuthor foo 3645 do someth
  • Spring boot 与 H2 数据库自动创建

    我通过 Spring Boot 在我的 Java 应用程序中使用嵌入式 H2 目前 它创建 覆盖 我在数据库中的表 但一旦我把它投入生产 我不希望我的表被擦除并重新创建 所以我不会丢失表中以前的数据 但我不知道如何实现这一点 不知道该放什么
  • 解析动态命名的 JSON 对象最有效的方法是什么?

    我正在尝试解析一个 JSON 响应 其中包含一些我不太熟悉的内容 而且我也没有经常在野外见过 在其中一个 JSON 对象内部 有一个动态命名的 JSON 对象 在这个例子中 里面有一个JSON对象 bugs named 12345 这与错误