按键递归搜索值
Recursive search values by key
我有一个 JSON 这样的:
{
"A": { "error": null },
"B": { "C": {"error": "error string"}},
"C": { "D": {"error": null}},
"D": { "error": "err str"}
}
end 我想找到 error 键的所有值,这些值不是 null.
对于我的示例,它应该 return
"error string"
"err str"
我该怎么做? jq可以吗?
用..
递归迭代,得到所有的.error
值。如果它们是 null
,请删除它们:
jq '.. | .error? // empty'
或者,您可以 select 字符串元素 strings
:
而不是使用 empty
jq '.. | .error? | strings'
这是一个使用 tostream 和 select
的解决方案
tostream
| select(length==2 and .[0][-1]=="error" and .[1]!=null) as [$p,$v]
| $v
我有一个 JSON 这样的:
{
"A": { "error": null },
"B": { "C": {"error": "error string"}},
"C": { "D": {"error": null}},
"D": { "error": "err str"}
}
end 我想找到 error 键的所有值,这些值不是 null.
对于我的示例,它应该 return
"error string"
"err str"
我该怎么做? jq可以吗?
用..
递归迭代,得到所有的.error
值。如果它们是 null
,请删除它们:
jq '.. | .error? // empty'
或者,您可以 select 字符串元素 strings
:
empty
jq '.. | .error? | strings'
这是一个使用 tostream 和 select
的解决方案 tostream
| select(length==2 and .[0][-1]=="error" and .[1]!=null) as [$p,$v]
| $v