Syntax 如何使用jq进行键为数字字符串的查询

Syntax 如何使用jq进行键为数字字符串的查询,syntax,jq,invocation,Syntax,Jq,Invocation,最近发现了jq,我正在使用它格式化一些数据 如何使用它访问碰巧是数字字符串的json对象的字段 例如,以下操作因错误而失败: echo'{“20”:“二十”}jq.[20] 正确的方法是什么?立即回答:使用更多的引号 在jq.[“20”]中,双引号被解析为shell语法,而不是jq语法(shell引用是逐字符的:可以在较大的字符串中切换引用类型)。使用单引号保护整个字符串不被shell修改: $ echo '{"20":"twenty"}' | jq '.["20"]' "twenty"

最近发现了
jq
,我正在使用它格式化一些数据

如何使用它访问碰巧是数字字符串的json对象的字段

例如,以下操作因错误而失败:

echo'{“20”:“二十”}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
$set-x
$echo'{“20”:“二十”}jq。[“20”]
+回音“{”20:“二十”}”
+jq.“[20]”
jq:错误(位于:1):无法为编号为的对象编制索引

如您所见,
jq.[“20”]
被解析为与
jq.[20].

完全是一个shell问题,而不是jq问题。shell根本没有将引号传递给jq,因为它将它们解析为类似bash的环境中的语法变体:
jq.“20”
jq.[20 | tostring].
jq'getpath([“20”])。