Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json jq不处理带破折号和数字的标记名_Json_Bash_Jq - Fatal编程技术网

Json jq不处理带破折号和数字的标记名

Json jq不处理带破折号和数字的标记名,json,bash,jq,Json,Bash,Jq,我正在使用jq,但json标记中的“-”使jq无法编译。我无法逃避它使它工作。这是命令 curl -X GET -H "X-AppKey:foo" "foo/v2/_status" | jq '.component-status[]' 我在jq的github上读过这篇文章,但我不能让它工作 这是旋度的输出 { "status": "ok", "hostname": "0b0b495a46db", "component-status": [ { "sta

我正在使用jq,但json标记中的“-”使jq无法编译。我无法逃避它使它工作。这是命令

    curl -X GET -H "X-AppKey:foo" "foo/v2/_status" | jq '.component-status[]'
我在jq的github上读过这篇文章,但我不能让它工作

这是旋度的输出

   {
  "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
  }
]
委员会:

最简单有用的过滤器是
.foo
。当给定一个JSON对象(又名 作为输入,它在键“foo”处生成值, 如果不存在,则为空

如果密钥包含特殊字符,则需要使用 双引号如下:
“foo$”

从github问题:

目前,它被解析为减法运算。你总是可以 当键不符合标识符语法时,显式使用字符串


使用表单。[“quoted name”]有利于在jq的所有版本中工作。在jq版本1.4和更高版本中,缩写形式“引用的名称”也是supported@peak谢谢你的洞察力!你有关于这个的链接吗,这样我可以添加到答案中?我的
jq
-fu是有限的,我在这里所做的只是尝试一下,在
jq
项目的一期github中找到解释。手册()的“开发版本”有到其他版本的链接。jqfaq()也讨论了这个问题。从“开发版本”:>如果键包含特殊字符,则需要用双引号将其括起来,如:“foo$”。我遇到过方括号(
[“连字符字符串”]
)实际导致错误的情况:
jq:error:syntax error,意外的“[”,需要格式或qString\u START(Unix shell引用问题?)在
。而仅仅添加双引号(
“连字符字符串”
)效果很好。@BrianV你可以用它重新编程:
echo'{“a-a”:{“b-b”:“huzzah”}}jq.[“a-a”].“b-b”
。但如果你在
“b-b”
周围加上一个
[/code>,“b-b>,你就会得到这个错误。
也可以。
.foo, .foo.bar