问题描述
我需要使用一些使用 JMESPath 搜索 JSON 的系统。但是我发现它缺少很多重要的功能。比方说,搜索带有模式(如this)的字符串非常困难。 JMESPath 不支持正则表达式。添加拆分功能的提议自 2017 年以来已被冻结(如 this 和 this)。这些特性对 jq 都是可用的。所以我想知道为什么像 AWS S3 CLI 和 Ansible 这样的系统使用 JMESPath 而不是 jq 来查询 JSON?
解决方法
与其说是 JMESPath 和 jq
之间的区别,不如说是它们使用的不同方式。
假设您正在查询远程资源,结果将有数百万条记录,但您只关心记录的一个特定的、小得多的子集。你有两个选择:
- 将所有记录通过网络传输给您,然后在本地挑选您想要的记录
- 将您的过滤器发送到远程资源,并让它进行过滤,只向您发送响应。
jq
通常用于前者,JMESPath 用于后者。远程服务没有理由不能接受 jq
过滤器,或者您不能使用基于 JMESPath 的可执行文件。