如何在键为数字字符串的查询中使用jq

时间:2018-09-22 20:06:44

标签: syntax jq invocation

最近发现jq,并且正在使用它来格式化某些数据。

如何使用它访问恰好是数字字符串的json对象的字段?

例如,以下内容对我失败,并显示错误:

echo '{"20":"twenty"}' | jq .["20"]

什么是正确的方法?

1 个答案:

答案 0 :(得分:2)

立即回答:使用更多引号

jq .["20"]中,双引号被解析为shell语法,而不是jq语法(shell引号是一个字符一个字符:可以在较大的字符串中切换引号类型)。使用单引号防止整个字符串被外壳程序修改:

$ echo '{"20":"twenty"}' | jq '.["20"]'
"twenty"

自己发现问题

诊断此类问题的一种方法是使用外壳程序的xtrace工具,告诉外壳程序将其正在运行的命令行回显给您:

$ set -x
$ echo '{"20":"twenty"}' | jq .["20"]
+ echo '{"20":"twenty"}'
+ jq '.[20]'
jq: error (at <stdin>:1): Cannot index object with number

如您所见,jq .["20"]被解析为与jq '.[20]'相同