Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
使用jq在cli上解析Json_Json_Bash_Command Line_Jq - Fatal编程技术网

使用jq在cli上解析Json

使用jq在cli上解析Json,json,bash,command-line,jq,Json,Bash,Command Line,Jq,假设我有以下json对象: { "d": { "e": { "bar": 2 } }, "a": { "b": { "c": { "foo": 1 } } } } 我想在不键入'.a.b.c.foo' 我意识到我能做到。。。 echo'{“a”:{“b”:{“c”:{“foo”:1}}},“d”:{“e”:{“bar”:2}}}}}}{jq.[].[].[].foo'但是jq中是否存在递归野生型

假设我有以下json对象:

{
  "d": {
    "e": {
      "bar": 2
    }
  },
  "a": {
    "b": {
      "c": {
        "foo": 1
      }
    }
  }
}
我想在不键入
'.a.b.c.foo'

我意识到我能做到。。。
echo'{“a”:{“b”:{“c”:{“foo”:1}}},“d”:{“e”:{“bar”:2}}}}}}{jq.[].[].[].foo'
但是jq中是否存在递归野生型?像**?我肯定jq不支持*,有没有办法让jq支持jsonpath?
或者甚至只是另一个支持json路径的cli工具?

在jq 1.4中,您可以这样做:

$ jq '..|.foo?' file.json
如果你坚持使用1.3,你可以使用

$ jq 'recurse(if type == "array" or type == "object" then .[] else empty end) | if type == "object" then . else empty end | .foo' file.json

这有点像一口。。。这就是为什么1.4有
,它通过
中的所有iterables进行递归,还有
操作符,它不需要为不可能的对象建立索引。

递归for in循环怎么样?遍历层次结构中每个对象的所有属性,可以在此处找到更多信息。本质上:
jq'...foo?|选择(type!=“null”)”