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”])。