【问题标题】:JsonPath with Newtonsoft.JSON带有 Newtonsoft.JSON 的 JsonPath
【发布时间】:2017-04-17 19:43:25
【问题描述】:

我尝试了近一个小时不同的方法,但我不明白;(

我的 JSON 对象是这样的:

"typeOfHair": {
    "value": [
        {
            "code": "Dry Hair",
            "values": [
                {
                    "value": "DryHair",
                    "language": "en"
                },
                {
                    "value": "TrockenesHaar",
                    "language": "de"
                }
            ]
        },
        {
            "code": "Any Type of Hair",
            "values": [
                {
                    "value": "AnyTypeOfHair",
                    "language": "en"
                },
                {
                    "value": "JedenHaartyp",
                    "language": "de"
                }
            ]
        }
    ]
}

我的任务是使用 Newtonsoft.JSON 获取语言为“de”的所有值。 我目前的做法是:

JsonObject.SelectTokens("typeOfHair.value.values[?(@.language == 'de')].value").ToList()

有人可以帮我解决这个问题吗?

亲切的问候

【问题讨论】:

    标签: json json.net jsonpath


    【解决方案1】:

    你很亲密。您需要使用JsonPATH 通配符运算符[*] 来考虑外部value 数组typeOfHair.value[]

    var values = JsonObject.SelectTokens("typeOfHair.value[*].values[?(@.language == 'de')].value")
        // Convert from JValue to string
        .Select(v => (string)v)
        // Save in a list
        .ToList();
    

    结果是:

    ["TrockenesHaar","JedenHaartyp"]
    

    示例fiddle

    【讨论】:

    • 非常感谢
    【解决方案2】:

    我知道 OP 明确指定了 JSONPath,但为了完整起见,下面是如何使用 LINQ to JSON 实现相同的目的:

    var values = jObject["typeOfHair"]["value"]
        .SelectMany(v => v["values"])
        .Where(v => (string)v["language"] == "de")
        .Select(v => (string)v["value"])
        .ToList();
    

    演示:https://dotnetfiddle.net/1S4sT4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多