在bash中使用jq进行嵌套的Json解析

我需要解析一个 json 文件,我将 bash 脚本与 jq 绑定在一起,但没有得到预期的输出。

JSON 文件:

[
  {
    "fqdn": "my-created-lb",
    "status": "Active",
    "members": {
      "10.45.78.9:80": {
        "dc": "NA",
        "state": "enabled",
        "port": 80
      },
      "10.45.78.10:80": {
        "dc": "NA",
        "state": "enabled",
        "port": 80
      },
      "10.45.78.11:80": {
        "dc": "NA",
        "state": "enabled",
        "port": 80
      },
      "10.45.78.12:80": {
        "dc": "NA",
        "state": "enabled",
        "port": 80
      }
    }
  }
]

我需要输出为:

"my-created-lb"
"10.45.78.9:80","enabled"
"10.45.78.10:80","enabled"
"10.45.78.11:80","enabled"
"10.45.78.12:80","enabled"

我在 jq 下面尝试过,但没有得到预期的输出:

jq '.[] | .fqdn,.members,.members[].state'
jq '.[] | .fqdn,.members,.members[].state'

但我低于输出:

回答

因为您想要密钥的名称,所以您可以这样使用to_entries

jq -r '.[] | .fqdn, ( .members | to_entries | .[] | [ .key, .value.state ] | @tsv )'
jq -r '.[] | .fqdn, ( .members | to_entries | .[] | [ .key, .value.state ] | @tsv )'

输出:

编辑

要获得原始帖子中列出的确切输出,请将jq脚本修改为:

jq -r '.[] | [.fqdn], ( .members | to_entries | .[] | [ .key, .value.state ] ) | @csv'

输出:

my-created-lb
10.45.78.9:80   enabled
10.45.78.10:80  enabled
10.45.78.11:80  enabled
10.45.78.12:80  enabled


以上是在bash中使用jq进行嵌套的Json解析的全部内容。
THE END
分享
二维码
< <上一篇
)">
下一篇>>