Json.NET 使用的 JsonPath 语法是什么?

What is the JsonPath syntax used by Json.NET?

我正在尝试 select 某些具有 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,它 returns [1, 2, 3].

Json.NET 似乎既不支持逗号也不支持 *。如何使用 Json.NET 实现这一点,是否有任何关于 Json.NET jpath selectors 支持的内容的参考?

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

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

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

JSONPath expressions can use the dot–notation

$.store.book[0].title

or the bracket–notation

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

具体来说:

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

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

示例 fiddle.

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