【问题标题】:What is the JsonPath syntax used by Json.NET?Json.NET 使用的 JsonPath 语法是什么?
【发布时间】:2017-05-09 03:41:57
【问题描述】:

我正在尝试使用 Json.NET SelectTokens 选择一些节点,它似乎不支持 original jsonpath 支持的相同语法。鉴于此输入:

{
    "a": [
        {
            "id": 1
        }
    ],
    "b": [
        {
            "id": 2
        },
        {
            "id": 3,
            "c": {
                "id": 4
            }
        }
    ],
    "d": [
        {
            "id": 5
        }
    ]
}

我只想要 ab 中所有顶级对象的 id,而不是内部对象的 id。使用 gossner 的解析器,我可以做到:$.[a,b].*.id,它返回[1, 2, 3]

Json.NET 似乎既不支持逗号也不支持 *.如何使用 Json.NET 实现这一点,是否有任何 Json.NET jpath 选择器支持的参考资料?

【问题讨论】:

    标签: json json.net jsonpath


    【解决方案1】:

    以下路径适用于 Json.NET 10.0.2:

    var path = @"$.['a','b'][*].id";
    

    这条路径似乎与original JsonPATH article一致,其中指出:

    JSONPath 表达式可以使用点符号

    $.store.book[0].title

    或括号-符号

    $['store']['book'][0]['title']

    具体来说:

    • 括号内的名称显示为被引用。大概这样做可以区分索引和数字名称。

    • 数组索引始终显示在括号中,而不是在句点之间。

    示例fiddle

    (老实说,原始文章有些含糊,允许在实现上有所变化。例如,script expression, using the underlying script engine 到底是什么意思?)

    【讨论】:

    • 是Newtonsoft.Json,为什么大家都称它为Json.NET?
    • Newtonsoft.Json 是命名空间。 Json.NET 为产品名称,见newtonsoft.com/json
    • 我希望我能给这个答案投票一百次。甚至是提琴手的例子!太棒了。
    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多