如何通过带有特殊字符的jq访问财产?



给定此 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

我应该如何访问密钥?

您的键包含解释为减法运算符的破折号-

您需要通过双引号来告诉jq它是一个字符串。

如果在命令行中执行此操作,请将jq"脚本"括在单引号中,以避免 shell 解释任何特殊字符。

<wtf.json jq '."I-am-test-v2"' 

您可以通过适当的引用通过以下方式访问它:

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

最新更新