json - 如何使用特殊字符通过 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
我认为它与特殊的 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
我应该如何访问密钥?
解决方案
-
您的键包含被解释为减法运算符的破折号。
您需要jq
通过双引号来说明它是一个字符串。
如果您在命令行中执行此操作,请将jq
“脚本”括在单引号中,以避免您的 shell 解释任何特殊字符。
<wtf.json jq '."I-am-test-v2"'
推荐阅读
- selenium - 为 Selenium 独立服务器设置最大实例和最大会话
- javascript - 一段时间内每天的状态值的 C3/d3 条形图
- php - 如何从数组中的条目循环到末尾?树枝/php
- android - 适用于设备的 Android Management API 更改策略
- c# - 单元测试 .Net CORE 2.0 WebAPI - 带有文本流主体(非模型)的模拟(MOQ)HTTP POST
- python - python http服务器线程通过cli
- json - 使用 JSON 数据创建的 Angular 动态表单
- android - 如何在android中使用Volley获取数组的第一个值
- javascript - 将外部(usb3)相机镜头流式传输到 chrome for android 中的视频元素
- amazon-web-services - AWS EMR 火花集群 - 未找到文件异常