给定此json文件wtf.json
{
"I-am-test-v2": {
"exist": true
},
"works": {
"exist": true
}
}
我可以通过以下方式验证它是否具有这些密钥:
$ jq 'keys' wtf.json
[
"I-am-test-v2",
"works"
]
我可以通过以下方式访问works
:
$ jq .works wtf.json
{
"exist": true
}
但我不能选择:
$ jq .I-am-test-v2 wtf.json
因为这将导致错误:
jq: error: am/0 is not defined at <top-level>, line 1:
.I-am-test-v2
jq: error: test/0 is not defined at <top-level>, line 1:
.I-am-test-v2
jq: error: v2/0 is not defined at <top-level>, line 1:
.I-am-test-v2
jq: 3 compile errors
我假设它与特殊的char -
有关,但我不确定如何引用或转义它,因为这些尝试也都失败了,并出现了相同的错误:
jq ".I-am-test-v2" wtf.json
jq ."I-am-test-v2" wtf.json
或者一些不同的错误:
jq ."I\-am\-test\-v2" wtf.json
jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.I\-am\-test\-v2
jq: 1 compile error
我也试过了:
jq .["I-am-test-v2"] wtf.json
我怎么才能拿到钥匙?
发布于 2019-10-09 03:15:19
您的键包含被解释为减法运算符的破折号-
。
您需要通过双引号将键引起来来告诉jq
它是一个字符串。
如果您在命令行中执行此操作,请将您的jq
“脚本”括在单引号中,以避免您的shell解释任何特殊字符。
<wtf.json jq '."I-am-test-v2"'
发布于 2019-10-08 22:34:53
你可以通过以下方式通过适当的引用来访问它:
jq '.["I-am-test-v2"]' wtf.json
{
"exist": true
}
然后,它也适用于转义:
jq ".[\"I-am-test-v2\"]" wtf.json
请注意,您不能反转报价样式:
jq ".['I-am-test-v2']" wtf.json
jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at <top-level>, line 1:
.['I-am-test-v2']
jq: 1 compile error
https://stackoverflow.com/questions/58288556
复制相似问题