多个不同路径的 JSONPath 并集

Kar*_*usa 10 json jsonpath

我正在尝试构建一个JSONPath 查询,它将测试两个或多个路径的存在

让我们考虑以下示例文档:

{
          "firstName": "John",
          "lastName" : "doe",
          "age"      : 26,
          "address"  : {
            "streetAddress": "naist street",
            "city"         : "Nara",
            "postalCode"   : "630-0192"
          },
          "phoneNumbers": [
            {
              "type"  : "iPhone",
              "number": "0123-4567-8888"
            },
            {
              "type"  : "home",
              "number": "0123-4567-8910"
            }
          ]
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经发现:

$..[firstName,lastName,type]

并从整个文档中获取所有这些元素。

但是,我需要的是检查两个不同的路径,例如:

 $.firstName 
 $.address.city
Run Code Online (Sandbox Code Playgroud)

这可以通过单个 JSONPath 查询来完成吗?我不能写这样的东西:

$.[firstName,address.city]
Run Code Online (Sandbox Code Playgroud)

使用 XML 和 XPath 我可以写:

/person/firstname | /person/address/city
Run Code Online (Sandbox Code Playgroud)

并获得所有匹配 XML 元素的并集。

我可以对 JSONPath 做同样的事情吗?

Dan*_*iel 7

我认为原始 JSONPath 中最接近的是使用递归下降和联合,即

\n
$..[\'firstName\',\'city\']\n
Run Code Online (Sandbox Code Playgroud)\n

Goessner 实施将回归

\n
[\n   "John",\n   "Nara"\n]\n
Run Code Online (Sandbox Code Playgroud)\n

Kubernetes JSONPath支持 union 运算符的扩展,允许

\n
[\xe2\x80\x98metadata.name\xe2\x80\x99, \xe2\x80\x98status.capacity\xe2\x80\x99]\n
Run Code Online (Sandbox Code Playgroud)\n

其中name和是和capacity的成员metadatastatus

\n

JSON匹配是 JSONPath 的变体,最初基于 Kubernetes JSONPath 解析器,支持完全独立的路径的并集,例如

\n
[employee[5].name, company.name, wageTiers[compensation > 10000]]\n
Run Code Online (Sandbox Code Playgroud)\n

JSONMatch 在go中可用,我相信javascript也可用。

\n

少数 JSONPath 实现支持用点分隔的两个文字的方括号表示法和用点分隔且不带引号的两个文字的方括号表示法

\n

jsoncons C++ 库(自 0.161.0 起)支持完全独立的路径与表示法的 JSONPath 并集

\n
$..[\'firstName\',@.address.city]\n
Run Code Online (Sandbox Code Playgroud)\n