【发布时间】:2019-10-08 14:34:52
【问题描述】:
鉴于此 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
我认为它与特殊字符 - 有关,但我不确定如何引用或转义它,因为这些尝试也会失败并出现相同的错误:
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
我应该如何访问密钥?
【问题讨论】:
-
始终引用您的过滤器,最好在可用时使用单引号。否则,shell 将错误地解释所有内容并导致问题。