为什么人们使用 JMESPath 而不是 JQ?

问题描述

我需要使用一些使用 JMESPath 搜索 JSON 的系统。但是我发现它缺少很多重要的功能。比方说,搜索带有模式(如this)的字符串非常困难。 JMESPath 不支持正则表达式。添加拆分功能的提议自 2017 年以来已被冻结(如 thisthis)。这些特性对 jq 都是可用的。所以我想知道为什么像 AWS S3 CLI 和 Ansible 这样的系统使用 JMESPath 而不是 jq 来查询 JSON?

解决方法

与其说是 JMESPath 和 jq 之间的区别,不如说是它们使用的不同方式。

假设您正在查询远程资源,结果将有数百万条记录,但您只关心记录的一个特定的、小得多的子集。你有两个选择:

  1. 将所有记录通过网络传输给您,然后在本地挑选您想要的记录
  2. 将您的过滤器发送到远程资源,并让进行过滤,只向您发送响应。

jq 通常用于前者,JMESPath 用于后者。远程服务没有理由不能接受 jq 过滤器,或者您不能使用基于 JMESPath 的可执行文件。