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

标签 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[]。基本上,输出可能如下所示:

example1, git
example2, root
example2, www

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

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

我怎样才能在选定的数组元素中打印一个值?

最佳答案

你可以使用下面的jq命令:

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

关于json - 如果在数组中找到值,如何在不同级别输出键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51476598/

相关文章:

java - 如何使用 gson 正确格式化 json 字符串,在逗号后加一个空格?

javascript - 防止从 Firebase 的 Angular 中的 JSON 中删除格式

json - 使用 jq 获取具有最新时间戳的 json 对象

command-line - 如何顺序打印jq输出

linux - 以 CSV 格式打印 JSON 中的所有键和值

json - 将 "="分隔值文件转换为 ":"json 文件

java - jackson 序列化没有正确处理单引号

python - 将 json 转换为 csv 时出现 "List index not in range"错误?

json - 无需在 Swift 中关闭应用程序即可重新加载已解析的 URL

json - 使用 Unix 工具解析 JSON