Newtonsoft 从 JSON 路径更新 JObject?
Newtonsoft update JObject from JSON path?
我知道使用 select 标记函数来传递 json 路径。例如:
JObject jObect = JObject.Parse("{some json string}");
JToken jToken = jObject.SelectToken("root.item[0].myProperty");
我正在寻找的是一种在给定 JSON 路径更新原始 JObject 的简单方法?
jObject[jsonPath] = "My New Value"
显然,它采用对象键而不是 JSON 路径。谢谢。
Json 路径(以及与此相关的 xpath)用于 get 层次结构中的项目,而不是 set他们。您需要使用 JSON 路径 获取 父对象,然后通过正常方式 设置 属性。
var parent = jObject.SelectToken("root.item[0]");
parent["myProperty"] = "My New Value";
我认为@dbc 给出了一个很好的扩展,允许我们更新 json 对象值。可以找到他的答案.
但是,我会把我在上述答案的帮助下做出的解决方案放在这里:
public static class JsonExtensions
{
public static JObject ReplacePath<T>(this JToken root, string path, T newValue)
{
if (root == null || path == null)
{
throw new ArgumentNullException();
}
foreach (var value in root.SelectTokens(path).ToList())
{
if (value == root)
{
root = JToken.FromObject(newValue);
}
else
{
value.Replace(JToken.FromObject(newValue));
}
}
return (JObject)root;
}
}
你能做什么,使用上面的方法,你可以传递 JObject,jsonPath 和你想要替换的值。因此,在您的情况下,调用方法如下所示:
var jsonObj = JObject.Parse("{some json string}");
jsonObj = JsonExtensions.ReplacePath(jsonObj,
"$. root.item[0].myProperty",
"My New Value");
希望这对你有用!
中放的一些例子
可以替换Jtoken函数来更新值
var parseResponse = JToken.Parse(jsonString);
//This commented code will update all the myproperty value in the item array
//var selectedPath = parseResponse.SelectToken("$.root.item[*].myProperty");
var selectedPath = parseResponse.SelectToken("$.root.item[0].myProperty");
if(selectedPath!=null){
selectedPath.Replace(newValue);
}
我知道使用 select 标记函数来传递 json 路径。例如:
JObject jObect = JObject.Parse("{some json string}");
JToken jToken = jObject.SelectToken("root.item[0].myProperty");
我正在寻找的是一种在给定 JSON 路径更新原始 JObject 的简单方法?
jObject[jsonPath] = "My New Value"
显然,它采用对象键而不是 JSON 路径。谢谢。
Json 路径(以及与此相关的 xpath)用于 get 层次结构中的项目,而不是 set他们。您需要使用 JSON 路径 获取 父对象,然后通过正常方式 设置 属性。
var parent = jObject.SelectToken("root.item[0]");
parent["myProperty"] = "My New Value";
我认为@dbc 给出了一个很好的扩展,允许我们更新 json 对象值。可以找到他的答案
但是,我会把我在上述答案的帮助下做出的解决方案放在这里:
public static class JsonExtensions
{
public static JObject ReplacePath<T>(this JToken root, string path, T newValue)
{
if (root == null || path == null)
{
throw new ArgumentNullException();
}
foreach (var value in root.SelectTokens(path).ToList())
{
if (value == root)
{
root = JToken.FromObject(newValue);
}
else
{
value.Replace(JToken.FromObject(newValue));
}
}
return (JObject)root;
}
}
你能做什么,使用上面的方法,你可以传递 JObject,jsonPath 和你想要替换的值。因此,在您的情况下,调用方法如下所示:
var jsonObj = JObject.Parse("{some json string}");
jsonObj = JsonExtensions.ReplacePath(jsonObj,
"$. root.item[0].myProperty",
"My New Value");
希望这对你有用!
中放的一些例子可以替换Jtoken函数来更新值
var parseResponse = JToken.Parse(jsonString);
//This commented code will update all the myproperty value in the item array
//var selectedPath = parseResponse.SelectToken("$.root.item[*].myProperty");
var selectedPath = parseResponse.SelectToken("$.root.item[0].myProperty");
if(selectedPath!=null){
selectedPath.Replace(newValue);
}