如何将 jq 用于键为数字字符串的查询

How to use jq for a query where key is a numeric string

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

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

例如,以下对我来说失败并出现错误:

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

正确的做法是什么?

立即回答:使用更多引号

jq .["20"] 中,双引号被解析为 shell 语法,而不是 jq 语法(shell 引号是逐个字符的:可以切换引号在较大的字符串中键入)。使用单引号保护整个字符串不被 shell:

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

自己发现问题

诊断此类问题的一种方法是使用 shell 的 xtrace 工具,告诉 shell 向您回显命令行 运行:

$ 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]'

相同