按键递归搜索值

时间:2016-07-19 13:02:43

标签: json bash jq

我有一个像这样的JSON:

{ 
  "A": { "error": null },
  "B": { "C": {"error": "error string"}},
  "C": { "D": {"error": null}},
  "D": { "error": "err str"}
}

结束我想找到错误键的所有值,这些值不是 null

我的例子应该返回

"error string"
"err str"

我该怎么办?是否可以使用 jq

2 个答案:

答案 0 :(得分:11)

使用..递归迭代,并获取所有.error值。如果他们是null,请将其删除:

jq '.. | .error? // empty'

或者,您可以使用empty选择字符串元素,而不是使用strings

jq '.. | .error? | strings'

答案 1 :(得分:0)

以下是使用 tostream 选择

的解决方案
  tostream
| select(length==2 and .[0][-1]=="error" and .[1]!=null) as [$p,$v]
| $v