最近发现jq
,并且正在使用它来格式化某些数据。
如何使用它访问恰好是数字字符串的json对象的字段?
例如,以下内容对我失败,并显示错误:
echo '{"20":"twenty"}' | jq .["20"]
什么是正确的方法?
答案 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]'
相同