如果在数组中找到值,如何在不同级别上输出键

时间:2018-07-23 10:25:53

标签: json jq

使用jq,我想根据数组中是否存在多个值在JSON文件的不同级别上输出它们。

我的数据如下所示。它显示了我检查的有关有权访问该主机的主机的数量:

[
  {
    "server": "example_1",
    "version": "Debian8",
    "keys": [
      {
        "fingerprint": "SHA256:fingerprint1",
        "for_user": "root",
        "name": "user1"
      },
      {
        "fingerprint": "SHA256:fingerprint2",
        "for_user": "git",
        "name": "user2"
      }
    ]
  },
  {
    "server": "example_2",
    "version": "Debian9",
    "keys": [
      {
        "fingerprint": "SHA256:fingerprint2",
        "for_user": "root",
        "name": "user2"
      },
      {
        "fingerprint": "SHA256:fingerprint2",
        "for_user": "www",
        "name": "user2"
      }
    ]
  },
  {
    "server": "example_3",
    "version": "CentOS",
    "keys": [
      null
    ]
  }
]

我想提取server的值和for_user的值,以在.keys[]中找到user2作为名称的任何情况。基本上,输出看起来像这样:

example1, git
example2, root
example2, www

我已经可以做的是显示第一列,因此.server的值:

cat test.json | jq -r '.[] | select(.keys[].name | index("user2")) | .server'`

如何在选定的数组元素中打印一个值?

1 个答案:

答案 0 :(得分:1)

您可以使用以下jq命令:

jq -r '.[]|"\(.server), \(.keys[]|select(.name=="user2").for_user)"'