问题标签 [jmespath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4931 浏览

amazon-web-services - 过滤具有特定端口和 IP ACL 的安全组的 AWS CLI 输出

我在过滤 AWS CLI describe-security-groups 输出时遇到了困难

目标:在端口 22 上找到所有具有入口规则且 cidr 为 0.0.0.0/0 的 SG

亚马逊自己的文档提供了一个示例,但声明他们的查询存在一个限制,因为它将首先过滤端口 22 的整个数据集,然后过滤 0.0.0.0/0 的整个数据集。这意味着具有以下规则的 SG 仍将触发:

这完全违背了过滤的目的,我什至不确定亚马逊为什么为该示例提供“描述具有特定规则的安全组”的标题

路线1:先是aws cli查询,然后是jq

这条路线基于我在这里找到的:https ://github.com/aws/aws-cli/issues/971

它提供了所有安全组的列表,但显示了具有 22 个 0.0.0.0/0 的任何 SG 的嵌套数据(并成功忽略了其他端口的任何 0.0.0.0/0 ACL) 在下面的输出中,我感兴趣的是 SG1 , SG2/SG3 需要被过滤掉。

这是一个很好的第一步,因为我已经消除了与端口 22 无关的 0.0.0.0/0 ACL。但是当我尝试运行 jq 来简单地删除具有空数据集的条目时,我遇到了困难钥匙被剥夺了。

  • 当我尝试更深入地选择嵌套部分时,我最终会遇到无法迭代 null 之类的错误
  • 如果我尝试使用包含,我什么也得不到,所以我什至不确定我哪里出错了

路线 2:jq 未查询的 CLI 输出

我从一开始就使用 jq 无法摆脱原始 AWS 示例的陷阱,我可以首先查询包含端口 22 的所有 SG,然后查询 0.0.0.0/0 的任何 ACL,其中当然给了我误报。由于 jq 的流性质,我还没有弄清楚如何检查条件 A(端口 22),然后仅在与条件 A 相关的项目上检查条件 B(0.0.0.0/0)。

这是 2 个 SG 的一些经过净化的原始 CLI 输出,我需要再次获取第一个,而不会在第二个触发误报

0 投票
3 回答
1309 浏览

amazon-web-services - 使用 JMESPath 在 AWS Auto Scaling 组中搜索两个标签

我有以下 python boto3 代码。让我获得所有带有“SubEnvironment”标签且值为“teal”的 AutoScalingGroup 名称效果很好

我真正想要的是在其中添加值为“foo”的“StackName”,以便我得到我想要的结果。我不熟悉 JMESPath,所以我不知道该怎么做。

0 投票
2 回答
1272 浏览

python - 当值为数字时,使用 jmespath 从键/值对中获取值

我正在尝试使用 jmespath 从 JSON 文档中检索密钥(instanceId)。JSON 文档如下所示:

我觉得这应该工作:

jmespath.search('instances[?hostIp=="10.200.10.150"].instanceId', targets)

但它返回一个空集。当用字符串(例如字母)替换IP 地址时,它返回instanceId。当它是一个数字时,用于搜索值的 jmespath 语法是什么?最终,我试图从hostIp 中获取instanceId。

0 投票
1 回答
9454 浏览

aws-cli - 查询多个值

我正在尝试按多个值进行过滤,但是我似乎无法使 and 子句起作用(例如 filter1 和 filter 2 ...等):

显示数据库名称为“testing”的快照

显示名为“test1”的快照

显示来自名为 test1 的数据库测试的快照

如何做到这一点?

0 投票
1 回答
972 浏览

ansible - 如何在jmespath中合并一系列对象

include_vars执行with后我得到了一系列结果with_items

我正在尝试将带有结果的对象放到一个仅包含这些tag_Cluster_*东西的平面对象中。

查询results[].ansible_facts结果是一个数组,例如:
[{tag_Cluster_A:{}},{tag_Cluster_B:{}}]距离期望结果只有 1 步。

我如何将这些组合在一起?

0 投票
1 回答
1923 浏览

python - 使用 jmespath 过滤掉 Json

我有这个简单的 Python 脚本,它应该是更大的一部分我只是不知道如何使用 jmespath

我想要的是基本上删除具有不可预测值的键的行(在完美的世界中,我会将值切换为通用的值) - 例如:last-sent-msg-timestamp、session-duration、stateful-stats:last-received- rpt-msg-时间戳。完美地,我希望保留其他所有内容,尽管我可以忍受丢失拓扑和节点标签。

问题是我只能使用一个 jmespath.search并且我只能做一个 jmespath 表达式。我也不能使用 Python 中的任何其他东西——这个脚本只是示例。

这可能与 jmespath 吗?由于项目的限制,这是目前我最好的选择。

0 投票
1 回答
149 浏览

json - JMESPpath:按嵌套属性过滤

我正在尝试使用 JMESPath jp( https://github.com/jmespath/jp ) 实用程序应用过滤器。我的目标是只让状态为“已添加”并0000debf17cff54b过滤掉特定设备 ID(例如)的流。

我正在尝试这样的事情: cat test | ./jp '[][?id=="of:00002259146f7743" && state=="ADDED"]' 但结果是[]

0 投票
1 回答
736 浏览

jmespath - 如何使用 JMESPath 过滤此 JSON 数据的子元素

我正在使用 Ansible 在多个环境中创建用户。我正在尝试将包含创建新 unix 用户所需的所有数据的用户 var 合并到一个全局共享的 var 中。为此,我计划使用子元素来控制在哪些主机上创建哪些用户等。

但是,我正在努力弄清楚如何过滤这些数据,以便我可以为当前主机提供正确的凭据集。

我需要将“环境”键过滤为仅具有我正在寻找的“名称”值的元素,但在结果中保留父对象的键。

我有什么/我想要什么:

JSON:

我想要的是:

更多信息:

我能够使用此查询接近,但我不知道如何进一步缩小结果范围,以便保留每个“用户”对象中的所有键,但将子元素“环境”过滤到匹配的那些我的查询。

JMESPath 查询:users[?environments[?name=='env_one']]

输出:

如果有用的话,这是 YAML 中的原始数据集:

YAML:

0 投票
1 回答
1408 浏览

json - How do I filter elements from a list correctly with JMESPath and Ansible?

I have the following structure.

I want to print all elements where [].tags.Name contains the string "SECOND" (so just the second element. How do I achieve this?

This is what I've tried, but it's not working.

I tried using http://jmespath.org but can't extract the data the way I want either.

0 投票
1 回答
2056 浏览

json - 如何在 ansible playbook 中使用 JMESPath 进行排序?

在播放 ansible 剧本期间,我有一个由 consul 从 consul 返回的数组:

我想"Node": {"Node" : "hostname"}在 ansible playbook中对其进行排序

我已经阅读了 JMESPath 和 ansible 文档一整天,但仍然不知道如何实现它(顺便说一句,在 jq 中很容易,sort_by(.Node.Node)但这个技巧不适用于 ansible)