【问题标题】:How can I best utilize Json.NET to modify parts of an existing JSON object?如何最好地利用 Json.NET 来修改现有 JSON 对象的部分内容?
【发布时间】:2010-07-08 17:34:38
【问题描述】:

示例:

我有以下 JSON 对象。

{"currentVersion" : "10.0", 
  "folders" : [], 
  "services" : [
    {"name" : "nyc", "type" : "MapServer"}, 
    {"name" : "philly", "type" : "MapServer"}
  ]
}

我希望能够根据 name 属性的值从 services 数组中删除一项或多项。例如,我想搜索 name="nyc" 并从数组中删除以下对象。

{"name" : "nyc", "type" : "MapServer"}

最终结果是一个如下所示的对象:

{"currentVersion" : "10.0", 
  "folders" : [], 
  "services" : [
    {"name" : "philly", "type" : "MapServer"}
  ]
}

我已经能够相当容易地创建新的 JSON 对象并且我可以读取现有的对象。但是,我很难确定修改现有 JSON 对象的最佳方法。特别是因为它与查询 JSON 对象中的特定对象有关。

我发现的一种方法(特定于此示例)是重建我想要修改的 JSON 部分并根据需要替换标记。但是,我必须认为有更好的方法。这段代码如下所示。

string json = @"{""currentVersion"" : ""10.0"", 
                    ""folders"" : [], 
                    ""services"" : [
                        {""name"" : ""nyc"", ""type"" : ""MapServer""}, 
                        {""name"" : ""philly"", ""type"" : ""MapServer""}
                    ]
                }";

string[] keepList = new string[] { "nyc" };

JObject o = JObject.Parse(json);
JArray services = (JArray)o["services"];
JArray newServices = new JArray();

foreach (JToken service in services)
{
    foreach (string keeper in keepList)
    {
        if ((string)service["name"] == keeper)
        {
            newServices.Add(service);
            break;
        }
    }
}

services.Replace(newServices);

string output = o.ToString();

如何最好地利用 Json.NET 来修改现有 JSON 对象的部分内容?

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    除了原始问题中提供的方法之外,我还没有确定修改现有 JSON 的替代方法。如果有更好的方法浮出水面,我很乐意接受它作为正确答案。

    与此同时,我实施的解决方案是用新创建的对象替换我需要修改的 JSON 对象的部分。下面是一个例子。

    string json = @"{""currentVersion"" : ""10.0"", 
                        ""folders"" : [], 
                        ""services"" : [
                            {""name"" : ""nyc"", ""type"" : ""MapServer""}, 
                            {""name"" : ""philly"", ""type"" : ""MapServer""}
                        ]
                    }";
    
    string[] keepList = new string[] { "nyc" };
    
    JObject o = JObject.Parse(json);
    JArray services = (JArray)o["services"];
    JArray newServices = new JArray();
    
    foreach (JToken service in services)
    {
        foreach (string keeper in keepList)
        {
            if ((string)service["name"] == keeper)
            {
                newServices.Add(service);
                break;
            }
        }
    }
    
    services.Replace(newServices);
    
    string output = o.ToString();
    

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 2015-11-28
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      相关资源
      最近更新 更多