我正在尝试构建一个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"
}
]
}
到目前为止,我发现:
$..[firstName,lastName,type]
并从整个文档中获取所有这些元素。
但是,我需要检查两种不同的路径,例如:
$.firstName
$.address.city
可以使用单个JSONPath查询来完成吗?我不能写任何像:
$.[firstName,address.city]
使用XML和XPath,我可以写:
/person/firstname | /person/address/city
并获得所有匹配的XML元素的联合。
我可以用JSONPath做同样的事吗?
我认为最接近原始JSONPath的是使用递归下降和联合,即
$..['firstName','city']
Goessner实现将返回
[
"John",
"Nara"
]
kubernetes JSONPath支持对union运算符的扩展,允许
[‘metadata.name’, ‘status.capacity’]
其中name
和capacity
是metadata
和status
的成员。
JSONMatch是JSONPath的变体,最初基于Kubernetes JSONPath解析器,支持完全独立路径的并集,例如:
[employee[5].name, company.name, wageTiers[compensation > 10000]]
JSONMatch可在go获得,我也相信javascript。
jsoncons C++ library v0.123.0支持完全独立路径的JSONPath联合,包括
$..[firstName,address.city]