如何使用 JMESPath 使用不区分大小写的正则表达式进行搜索

HKT*_*Lee 22 json jq jmespath

我需要使用一些使用 JMESPath 来搜索 JSON 的系统。如何搜索具有模式的字符串(像这样)。如何在不区分大小写模式下使用正则表达式执行此操作?

PS:不知道为什么AWS S3 CLI和Ansible使用JMESPath而不是jq来查询JSON。它似乎缺少这些功能,并且自 2017 年以来添加 split 功能的提案已被冻结(就像thisthis)。这些功能jq都可以使用。JMESPath 有何优势使其具有吸引力?

che*_*ner 15

与其说 JMESPath 之间的差异,不如说它们的使用jq方式不同。

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

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

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

  • 我怀疑原因与这样一个事实有关:编写 jq 程序非常容易,该程序将消耗尽可能多的 CPU 和/或 RAM。考虑例如 `range(0;infinite)` 或 `[range(0;infinite)]` (9认同)
  • 或者JMESPath强调*过滤*,而`jq`强调*转换*。 (7认同)
  • 我应该强调,我的答案仅基于我如何看待每个“使用”,而不是基于它们“适合”什么。也许 JMESPath 经过优化,使其编写起来更简单,但功能较弱。(或者也许 JMESPath 在引入时更强大,因此让人们选择它作为查询语言,但“jq”同时赶上了。) (2认同)
  • 我指的是*技术*原因。如果服务器想要接受处理非终止“jq”过滤器的风险,则可以自由地这样做。 (2认同)