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'