首页 > 解决方案 > 如何将空数组添加到 json 有效负载?

问题描述

是否可以将数组添加到 json 有效负载?

例如,假设这是我的有效载荷:

        string json = @"{
          'channel': {
            'title': 'Star Wars',
            'link': 'http://www.starwars.com',
            'description': 'Star Wars blog.',
            'obsolete': [{'something':'awesome'},{'a':'b'}],
            'item': [],
            'nested':[{'upgrademe':'please'}, {'upgrademe':'no'}]
          }
        }";

我想要的结果是这样的:

        string json = @"{
          'channel': {
            'title': 'Star Wars',
            'link': 'http://www.starwars.com',
            'description': 'Star Wars blog.',
            'obsolete': [{'something':'awesome'},{'a':'b'}],
            'item': [],
            'nested':[{'upgrademe':'please', 'emptyArray':[]}, {'upgrademe':'no'}]
          }
        }";

对于每个channel.nestedwhere upgrademe==please然后我想添加一个空数组,例如[].

前:

'nested':[{'upgrademe':'please'}, {'upgrademe':'no'}]

后:

'nested':[{'upgrademe':'please', 'emptyArray':[]}, {'upgrademe':'no'}]

我目前的实现:

    public static JObject AddArray(this JObject jObject, string path, string key, string value)
    {
        var obs = jObject.SelectToken(path);
        if (obs == null)
        {
            return jObject;
        }

        foreach (var jsonObject in obs)
        {
            if (jsonObject.SelectToken(key).ToString().ToLower() != value.ToLower())
            {
                continue;
            }

            jObject.SelectToken(path).Parent.AddAfterSelf(new JValue(new JProperty("emptyArray", new JArray())));
        }

        return jObject;
    }

我在这条线上遇到了一个例外:

在此处输入图像描述

用法示例:

        var result = jobject.AddArray("channel.nested", "upgrademe", "please");

以上内容如下:

找到对象“channel.nested”,当 upgrademe==please 时,添加一个兄弟节点作为一个空数组

我们如何有条件地将数组对象添加到 json 有效负载中?

标签: c#.netjsonjson.net

解决方案


由于您正在将新属性添加到对象中。你不需要使用JValue

直接使用JProperty即可:

AddAfterSelf(new JProperty("emptyArray", new JArray()))


推荐阅读