Rking14
Rking14

Reputation: 345

jq - Selecting objects containing certain key

Let's say I have this JSON file below:

{
  "team": {
    "money": 100,
  },
  "group": {
    "money": 200,
    "snack": true,
  }
}

I want to select the objects which has a "snack" key including its parent. The current command I'm using is:

jq '..|objects|select(has("snack"))' json

This however, does not include the parent, which in this case is "group". How do I select the parent of the selected object as well?

Upvotes: 1

Views: 133

Answers (1)

peak
peak

Reputation: 116957

Instead of using .., you could use paths. That is, you'd select the paths that lead to the items of interest, and work from there. So you'd start with:

paths(objects) as $p
| select(getpath($p)|has("snack"))
| $p

For the given input (after having been corrected), this would yield:

["group"]

So you might want to replace the $p in the last line by $p[-1], but it's not altogether clear how useful that would be. More useful would be getpath( $p[:-1] )

Upvotes: 2

Related Questions