【问题标题】:Insert new element in nested json object在嵌套的 json 对象中插入新元素
【发布时间】:2019-10-08 22:49:02
【问题描述】:

我已经像这样嵌套了一些嵌套级别的 JSON:

{
  "Main": [
    {
      "id": 123,
      "Sub1": [
        {
          "id": 2345,
          "description": "...",
          "Sub11": [
            {
              "subid": 6633,
              "xid": 5555
            }
          ]
        }
      ]
    },
    {
      "id": 332,
      "Sub1": [
        {
          "xid": 5555,
          "description": "...",
          "Sub11": [
            {
              "subid": 6794
            },
            {
              "subid": 4444
            }
          ]
        }
      ]
    }
  ]
}

这只是一个例子。我需要遍历整个 JSON 并为属性为 xid: 5555 的元素插入一些 json 对象(NewNode

例如。 之前-

"Sub11": [
        {
          "subid": 6633,
          "xid": 5555
        }
      ]

之后-

"Sub11": [
        {
          "subid": 6633,
          "xid": 5555,
          "NewNode":{
             "SomeProperty": "value"
          }
        }
      ]

我正在考虑遍历每个节点,检查属性名称 (xid)。如果它的值匹配,则在此处插入节点(NewNode)。

有没有更简单的方法来实现这一点?

【问题讨论】:

  • 欢迎来到 StackOverflow!你能告诉我们你尝试了什么,为什么它不起作用?
  • > "...检查属性名称 (xid)。如果它的值匹配,则在此处插入节点 (NewNode)。"你试过这个吗?如果你这样做了,结果如何?
  • @Sabuncu 试图实现这一目标。可以获得固定 json 所需的行为。但是由于我必须遍历所有节点,这就是问题所在。
  • 所以您是在寻找优化的解决方案,而不是遍历所有节点?如果是这样,请编辑您的问题以准确反映您在帮助方面寻求的内容。

标签: c# json json.net


【解决方案1】:

您可以使用 Json.Net 的 LINQ-to-JSON API 轻松做到这一点:

var root = JObject.Parse(json);
var matches = root.DescendantsAndSelf()
                  .OfType<JObject>()
                  .Where(x => x["xid"] != null && x["xid"].ToString() == "5555");

foreach (JObject jo in matches)
{
    jo.Add("NewNode", new JObject(new JProperty("SomeProperty", "value")));
}

Console.WriteLine(root.ToString());

小提琴:https://dotnetfiddle.net/DzJd3K

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多