jq 打印子对象中所有的键和值

Phi*_*ide 16 json jq

我找到了这个Q/A的解决方案来打印对象中的所有键:

jq -r 'keys[] as $k | "\($k), \(.[$k] | .ip)"' 
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我想在子对象上执行上述操作:

jq -r '.connections keys[] as $k | "\($k), \(.[$k] | .ip)"'
Run Code Online (Sandbox Code Playgroud)

这样做的正确语法是什么?

Rom*_*est 32

简单的管道keys功能:

样品input.json

{
    "connections": {
        "host1": { "ip": "10.1.2.3" },
        "host2": { "ip": "10.1.2.2" },
        "host3": { "ip": "10.1.18.1" }
    }
}
Run Code Online (Sandbox Code Playgroud)
jq -r '.connections | keys[] as $k | "\($k), \(.[$k] | .ip)"' input.json
Run Code Online (Sandbox Code Playgroud)

输出:

host1, 10.1.2.3
host2, 10.1.2.2
host3, 10.1.18.1
Run Code Online (Sandbox Code Playgroud)

  • `keys` 对键进行排序,因此值得指出的是 `keys_unsorted` 不会。 (9认同)
  • 该评论适用于遇到此问答的其他人。 (4认同)
  • @peak,OP写道“*我发现这个/sf/ask/2395845931/ ...*”其中接受的答案清楚地表明“*`keys`按排序顺序生成键名称;如果您希望它们按原始顺序排列,请使用“keys_unsorted”*”。所以OP意识到了这一点,并有意识地选择了“钥匙”。 (2认同)