如何将 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]'
相同
最近发现 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]'