使用LINQ按键名过滤JSON
给定以下JSON:使用LINQ按键名过滤JSON,json,linq,jsonpath,Json,Linq,Jsonpath,给定以下JSON: { "items": { "primary": "structured", "item0": { "keyA1": "value1", "keyA2": "value2", "keyA3": "value3" }, "item1": { "keyB1": "value1", "keyB2
{
"items": {
"primary": "structured",
"item0": {
"keyA1": "value1",
"keyA2": "value2",
"keyA3": "value3"
},
"item1": {
"keyB1": "value1",
"keyB2": "value2",
"keyB3": "value3"
},
"item2": {
"keyC1": "value1",
"keyC2": "value2",
"keyC3": "value3"
}
}
}
是否可以只获取键以“item”开头的对象,即“item0”、“item1”和“item2”?最好使用Json.NET和/或LINQ,但JSONPath表达式也可以(我尝试在JSONPath表达式中使用星号来匹配
项*
,但没有效果)。当然,可以使用Json.NET的:
var items=JObject.Parse(json)[“items”]
.儿童()
.Where(jp=>jp.Name.StartsWith(“项目”))
.Select(jp=>(JObject)jp.Value)
.ToList();
foreach(项目中的var项目)
{
foreach(项目中的var kvp)
{
Console.WriteLine(kvp.Key+“:”+kvp.Value);
}
Console.WriteLine();
}
Fiddle:我假设您不想要“items”对象(因为它也以“item”开头)。这正是我需要的!谢谢有没有一种使用
.SelectTokens()
+JSONPath的较短方法?据我所知,没有。我看不到一种使用JSONPath在密钥名上执行“StartsWith”的方法。
var items = JObject.Parse(json)["items"]
.Children<JProperty>()
.Where(jp => jp.Name.StartsWith("item"))
.Select(jp => (JObject)jp.Value)
.ToList();
foreach (var item in items)
{
foreach (var kvp in item)
{
Console.WriteLine(kvp.Key + ": " + kvp.Value);
}
Console.WriteLine();
}