我正在使用jq
但在我的json标签中有"-"使jq
无法编译。我无法逃避它来让它工作。这是命令:
curl -X GET -H "X-AppKey:foo" "foo/v2/_status" | jq '.component-status[]'
我已经在 github 中阅读了这篇文章jq
https://github.com/stedolan/jq/issues/202 但我无法让它工作。
这是curl
的输出:
{
"status": "ok",
"hostname": "0b0b495a46db",
"component-status": [
{
"status-code": 200,
"component": "Service1",
"status": "OK"
},
{
"status-code": 200,
"component": "Service2",
"status": "OK"
}
]
}
知道吗?
您需要用括号和双引号括起来:
jq '."component-status"'
使用您给定的输入,它将返回:
[
{
"status": "OK",
"component": "Service1",
"status-code": 200
},
{
"status": "OK",
"component": "Service2",
"status-code": 200
}
]
jq手册(开发)-->基本过滤器:
.foo, .foo.bar
最简单的有用过滤器是
.foo
。当给定一个 JSON 对象(又名 字典或哈希)作为输入,它在键"foo"处生成值, 如果不存在,则为 null。如果密钥包含特殊字符,则需要用 像这样的双引号:
."foo$"
.
来自 github 问题 如果字段名称有短划线,则无法选择字段:
目前,这被解析为减法。您可以随时 在密钥不符合标识符语法时显式使用字符串。
rjurney 或评论者对他的答案建议的选项对我不起作用(可能是因为我使用了 PowerShell),但是在 github 问题的答案中有一个解决方案,它做到了 - 用 \ 转义双引号
jq '."component-status"'