对于使用适用于.NET的Newtonsoft JSON库,我有点新鲜。有没有办法从JSONPath创建JObject或JToken?
例如,如下所示。
string jsonPath = "$.ArrayA[0].ArrayB[0].Property";
JObject jObj = JObject.FromJSONPath(jsonPath); // SOMETHING LIKE THIS
结果将是一个看起来像这样的JObject或JToken。
{
"ArrayA": [{
"ArrayB": [{
"Property": ""
}]
}
}
答案 0 :(得分:2)
否强>
如果您有一些现有的JSON,您可以将其解析为JToken,然后选择一个或多个后代JTokens使用SelectToken
或SelectTokens
并{{ 3}}。例如:
string json = @"{ ""ArrayA"": [{ ""ArrayB"": [{ ""Property"": ""foo"" }] }] }";
JToken token = JToken.Parse(json);
JToken fooToken = token.SelectToken("$..Property");
Console.WriteLine(fooToken.ToString()); // prints "foo"
您也可以手动构建JTokens的嵌套结构。例如,您可以在问题中创建JObject,如下所示:
var obj = new JObject(new JProperty("ArrayA", new JArray(
new JObject(new JProperty("ArrayB", new JArray(
new JObject(new JProperty("Property", ""))))))));
但是,除了JsonPath表达式之外,没有内置的方法来创建JToken。您需要使用自己的方法来执行类似的操作。但请记住,JsonPath被设计为查询机制;它没有干净地映射到新对象的创建。以下是您需要考虑的一些问题:
$.ArrayA[0].ArrayB[0].Property
中,Property
是什么类型的?是字符串,数字,布尔值,对象还是空数组?你会如何指定?$..book[(@.length-1)]
这样的表达式会创建什么?