使用 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