【问题标题】:Get key name based on subkey value根据子键值获取键名
【发布时间】:2020-06-02 22:48:36
【问题描述】:

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

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

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

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

我真正需要做的是如果.name=="node2" 那么它给了我generatednodeid2

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

【问题讨论】:

    标签: json key jq


    【解决方案1】:

    有什么想法吗?

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

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

    【讨论】:

    • 做到了!我昨天试过了,但无法让它工作。但我想我只是把过滤器的顺序弄错了。就像我说的,盯着它太久了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2021-07-25
    • 2022-12-02
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多