使用 LINQ 按键名过滤 JSON
Filter JSON by key name using LINQ
鉴于以下 JSON:
{
"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 and/or LINQ,但 JSONPath 表达式也可以(我尝试在 JSONPath 表达式中使用星号来匹配 item*
,但确实如此不工作)。
当然,您可以使用 Json.Net 的 LINQ-to-JSON API 来做到这一点:
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();
}
Fiddle: https://dotnetfiddle.net/j6nn3P
鉴于以下 JSON:
{
"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 and/or LINQ,但 JSONPath 表达式也可以(我尝试在 JSONPath 表达式中使用星号来匹配 item*
,但确实如此不工作)。
当然,您可以使用 Json.Net 的 LINQ-to-JSON API 来做到这一点:
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();
}
Fiddle: https://dotnetfiddle.net/j6nn3P