首页 > 解决方案 > 根据子键值获取键名

问题描述

我正在尝试设置一些监控。作为其中的一部分,我需要解析一些粗糙的 json 输出来检索节点 ID,每次重新启动节点或重新启动服务时,该节点 ID 都会发生变化。我总是知道节点名称,但不知道"id"。JSON 看起来像这样:

{
 "cluster_name":"cluster1",
 "nodes":
  {
   "generatednodeid1":{"name":"node01"},
   "generatednodeid2":{"name":"node2"}
  }
}

正如我所期望的那样,这样做.nodes | keys给了我["generatednodeid1","generatednodeid2"] 。

我试过.nodes[] | select(.name=="node2")但只输出{"name":"node2"}

我真正需要发生的是,如果.name=="node2"它给了我generatenodeid2

我一直在用头撞墙。我一生都无法弄清楚我错过了什么。这看起来很简单(可能是而且我已经看了太久了)。有任何想法吗?

标签: jsonkeyjq

解决方案


有任何想法吗?

在这种情况下,“to_entries”系列过滤器很有帮助,例如:

.nodes
| to_entries[]
| select(.value.name == "node2")
| .key

推荐阅读