JQ 不适用于带有破折号和数字的标签名称



我正在使用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"'

相关内容

  • 没有找到相关文章

最新更新