I have a JSON like this:
{
\"A\": { \"error\": null },
\"B\": { \"C\": {\"error\": \"error string\"}},
\"C\": { \"D\": {\"error\": null}},
\"D\": {
Here is a solution that uses tostream and select
tostream
| select(length==2 and .[0][-1]=="error" and .[1]!=null) as [$p,$v]
| $v
Use ..
to iterate recursively, and get all the .error
values. If they're null
, remove them:
jq '.. | .error? // empty'
Alternatively, instead of using empty
you can select the elements that are strings with strings
:
jq '.. | .error? | strings'