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"
}
]
}
到目前为止,我发现:
$..[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支持联合运算符的扩展,允许
[‘metadata.name’, ‘status.capacity’]
其中name
和是和capacity
的成员。metadata
status
JSONMatch是 JSONPath 的一个变种,最初基于 Kubernetes JSONPath 解析器,支持完全独立路径的联合,例如
[employee[5].name, company.name, wageTiers[compensation > 10000]]
JSONMatch 在go中可用,我也相信javascript。
少数 JSONPath 实现支持括号表示法,两个文字用点分隔,括号表示法,两个文字用点分隔,不带引号。
jsoncons C++ 库(自 0.161.0 起)支持带有符号的完全独立路径的 JSONPath 联合
$..['firstName',@.address.city]
推荐阅读
- python - 我如何让我的 discord.py 机器人阻止人们?
- directus - 使用 Directus 保存更改的问题
- express - 通过 p5 loadImage() 请求图像时,Safari 不会向 Express 发送 cookie
- javascript - localStorage 无法保存信息
- python - Scrapy 加载更多问题 - CSS 选择器
- ios - 如何获取单个 tableview 单元格的产品重量并显示所选产品重量的产品数量?
- ios - 你将如何在 Swift 中扩展嵌套的无约束泛型?
- android - 二进制 XML 文件第 20 行:在 Android 6.0 中膨胀类 TextView 时出错
- rest - RESTful URI 尾部斜杠或没有尾部斜杠
- slideshow - 滚动淡入/淡出