EditJSONwithJSONPath我想创建一个方法,让用户编辑(或添加)JSON特定值或对象(由JSONPath定位在JSON中)。下面的简单示例是我的想法。用户始终输入要更改的JSON、JSONPath和值/对象。我正在使用Json.NET库。方法输入{json,jsonpath,valuetoedit}||输出{newjsonasstring}示例输入:{"store":{"book":[{"category":"reference","author":"NigelRees","title":"SayingsoftheCentury","price":8.95},{"category":"fiction","author":"EvelynWaugh","title":"SwordofHonor","price":12.99},{"category":"fiction","author":"HermanMelville","title":"MobyDick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"JRRTolkien","title":"指环王","isbn":"0-395-19395-8","price":22.99}],"bicycle":{"color":"red","price":19.95}}}JSONPath示例:$.store.book[*].author要更改的示例值:NewAuthorSpecifiedByUser输出–新JSON,其中所有作者将更改为“NewAuthorSpecifiedByUser”。这可能吗?第3方包json.net允许轻松完成:ParseJSONtoLINQtoJSONhierarchyofJTokentokens。选择JSON值以使用JSONPath语法中的查询字符串通过SelectTokens进行修改。使用JToken.Replace()将所选值替换为新值。可以使用JToken.FromObject()将新值直接序列化为JToken.FromObject()。因此:publicstaticclassJsonExtensions{publicstaticJTokenReplacePath(thisJTokenroot,stringpath,TnewValue){if(root==null||path==null)thrownewArgumentNullException();foreach(varvalueinroot.SelectTokens(path).ToList()){if(value==root)root=JToken.FromObject(newValue);elsevalue.Replace(JToken.FromObject(newValue));}返回根;}publicstaticstringReplacePath(stringjsonString,stringpath,TnewValue){returnJToken.Parse(jsonString).ReplacePath(path,newValue).ToString();然后像这样使用它:varnewJsonAuthorString=JsonExtensions.ReplacePath(jsonString,@"$.store.book[*].author","NewAuthorSpecifiedByUser");原型小提琴。如果您要允许用户进行一系列编辑,将JSON永久保留在JToken层次结构中可能更有效,而不是重复地从字符串表示形式转换为字符串表示形式。另请参阅如何使用NuGet安装JSON.NET?.以上就是C#学习教程:使用JSONPath编辑所有JSON分享的内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
