我正在使用jq,但在我的json标签中使用“ - ”使jq无法编译。我无法逃避它使其成功。这里是命令
curl -X GET -H "X-AppKey:foo" "foo/v2/_status" | jq '.component-status[]'
我已经在jq的github上阅读了这篇文章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"
}
]
}
有什么想法吗?
答案 0 :(得分:9)
您需要用括号和双引号括起来:
jq '.["component-status"]'
根据您的输入,它返回:
[
{
"status": "OK",
"component": "Service1",
"status-code": 200
},
{
"status": "OK",
"component": "Service2",
"status-code": 200
}
]
jq Manual (development) --> Basic filters:
.foo, .foo.bar
最简单有用的过滤器是
.foo
。给定一个JSON对象(又名 字典或散列)作为输入,它产生键“foo”的值, 如果没有,则为null。如果密钥包含特殊字符,则需要将其包围 双引号如下:
."foo$"
。
来自github问题Cannot select field if field name has dashes:
目前,它被解析为减法。你可以随时 当您的键不符合标识符语法时,显式使用字符串。
答案 1 :(得分:1)
option suggested by rjurney 或他的回答的评论者对我不起作用(可能是因为我使用了 PowerShell),但是在 the answer from github issue 中有一个解决方案,它起作用了 - 用双引号转义\
jq '.\"component-status\"'