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

Json 如果在数组中找到值,如何输出不同级别的键,json,jq,Json,Jq,使用jq,我希望根据数组中是否存在多个值,在JSON文件的不同级别上输出多个值 我的数据如下所示。它显示了我检查的关于有权访问它的人的多个主机: [ { “服务器”:“示例1”, “版本”:“Debian8”, “钥匙”:[ { “指纹”:“SHA256:fingerprint1”, “for_user”:“root”, “名称”:“user1” }, { “指纹”:“SHA256:fingerprint2”, “对于用户”:“git”, “名称”:“user2” } ] }, { “服务器”:

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

我的数据如下所示。它显示了我检查的关于有权访问它的人的多个主机:

[
{
“服务器”:“示例1”,
“版本”:“Debian8”,
“钥匙”:[
{
“指纹”:“SHA256:fingerprint1”,
“for_user”:“root”,
“名称”:“user1”
},
{
“指纹”:“SHA256:fingerprint2”,
“对于用户”:“git”,
“名称”:“user2”
}
]
},
{
“服务器”:“示例2”,
“版本”:“Debian9”,
“钥匙”:[
{
“指纹”:“SHA256:fingerprint2”,
“for_user”:“root”,
“名称”:“user2”
},
{
“指纹”:“SHA256:fingerprint2”,
“供用户使用”:“www”,
“名称”:“user2”
}
]
},
{
“服务器”:“示例3”,
“版本”:“CentOS”,
“钥匙”:[
无效的
]
}
]
我想为
服务器
提取值,并为\u user提取
的值,在
.keys[]
中发现user2作为名称。基本上,输出可以如下所示:

example1,git
例2,根
例2,www
我已经可以做的是显示第一列,因此
.server
值:

cat test.json | jq-r.[]|选择(.keys[].name |索引(“user2”))|.server'`

如何在所选数组元素中也打印值?

您可以使用以下
jq
命令:

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

那很有效,谢谢!您能描述一下我如何在第三列中编写另一个值,如来自
fingerprint
?有点粗糙,但很有效:)
jq-r'.[].'”\(.server),\(.keys[].\124; select(.name==“user2”)\(.for \.u user),\(.fingerprint)”。