我有一个像这样的JSON:
{
"A": { "error": null },
"B": { "C": {"error": "error string"}},
"C": { "D": {"error": null}},
"D": { "error": "err str"}
}
结束我想找到错误键的所有值,这些值不是 null 。
我的例子应该返回
"error string"
"err str"
我该怎么办?是否可以使用 jq ?
答案 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