jq:错误:无法添加数字和字符串

时间:2017-10-24 13:24:16

标签: type-conversion jq

我想从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

4 个答案:

答案 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是一个字符串。您无法使用+直接添加它们,但您可以选择其他答案中说明的任何选项。