JSON.NET 只有 return 个包含特定子节点的节点
JSON.NET only return nodes that contain a specific child node
在 JSON.NET 中执行 SelectToken 时,有没有办法可以 return 包含特定子元素的元素的 JTokens 列表?例如,是否有一个 SelectToken 仅 return 我下面的示例 JSON 中存在“status”子节点的节点?[=13=]
"Fruits": [
{
"id": "1",
"value": "apple"
},
{
"id": "2",
"value": "banana",
"status": [
{
"fresh": "yes",
"peeled": "no"
}
]
},
{
"id": "3",
"value": "orange",
"status": [
{
"fresh": "yes",
"peeled": "yes"
}
]
}
]
您可以使用 LINQ to JSON API 来完成这样的任务(假设 Fruits
是根 json 对象上的 json 属性 :
var jObject = JObject.Parse(json_string);
var list = jObject
.Descendants()
.OfType<JObject>()
.Where(jp => jp.Children<JProperty>().Any(token => token.Name == "status"))
.ToList();
或使用json路径:
var list = jObject.SelectTokens("$.Fruits[?(@.status)]").ToList();
最简单的方法是
var fruitsWithStatus=JObject.Parse(json)["Fruits"].Where(f => f["status"]!=null ).ToList();
在 JSON.NET 中执行 SelectToken 时,有没有办法可以 return 包含特定子元素的元素的 JTokens 列表?例如,是否有一个 SelectToken 仅 return 我下面的示例 JSON 中存在“status”子节点的节点?[=13=]
"Fruits": [
{
"id": "1",
"value": "apple"
},
{
"id": "2",
"value": "banana",
"status": [
{
"fresh": "yes",
"peeled": "no"
}
]
},
{
"id": "3",
"value": "orange",
"status": [
{
"fresh": "yes",
"peeled": "yes"
}
]
}
]
您可以使用 LINQ to JSON API 来完成这样的任务(假设 Fruits
是根 json 对象上的 json 属性 :
var jObject = JObject.Parse(json_string);
var list = jObject
.Descendants()
.OfType<JObject>()
.Where(jp => jp.Children<JProperty>().Any(token => token.Name == "status"))
.ToList();
或使用json路径:
var list = jObject.SelectTokens("$.Fruits[?(@.status)]").ToList();
最简单的方法是
var fruitsWithStatus=JObject.Parse(json)["Fruits"].Where(f => f["status"]!=null ).ToList();