使用 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/