示例:
我有以下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对象中的特定对象。
我发现的一个方法(特定于此示例)是重建我想要修改的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对象的部分?
答案 0 :(得分:8)
我还没有确定修改现有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();