我想从jq输出下面打印成员和id的值:
$ cat test_|jq -r '.[] | select(.name=="AAA") | .'
{
"name": "AAA",
"members": 10,
"profiles": 0,
"templates": 0,
"ldapGroups": 0,
"ldapMembers": 0,
"id": "20"
}
不幸的是,它仅适用于其中一种:
$ cat test_|jq -r '.[] | select(.name=="AAA") | .members'
10
+" " +我收到错误:
$ cat test_|jq -r '.[] | select(.name=="AAA") | .members+" "+.id'
jq: error: number and string cannot be added
答案 0 :(得分:4)
我建议使用string interpolation。如有必要,它会自动将输入转换为字符串:
jq -r '.[]|select(.name=="AAA")|"\(.members) \(.id)"' file.json
答案 1 :(得分:1)
使用tostring
函数将数字转换为字符串:
jq -r '.[] | select(.name=="AAA") | (.members|tostring) +" "+ .id test'
答案 2 :(得分:0)
您尚未准确指定两个值的显示方式,因此值得指出您可以写:
.... | (.members, .id)
或
.... | [.members, .id]
或
.... | [.members, .id] | E
其中E可以是@csv或@tsv等。在jq 1.5中,join/1
也会进行类型转换。
答案 3 :(得分:0)
您可以从预测感兴趣的成员开始。 e.g
$ jq -Mc '.[] | select(.name=="AAA") | {members,id}' data.json
{"members":10,"id":"20"}
现在您可以看到.members
是一个数字,.id
是一个字符串。您无法使用+
直接添加它们,但您可以选择其他答案中说明的任何选项。