4

I am struggling to find a way to filter nodes against another expression rather than a string or number. I have looked at the specs for both JSONPath and JMESPath and find a little info on the inability to do this the way I have been trying.

JSONPath

"With JSONPath square brackets operate on the object or array addressed by the previous path fragment. Indices always start by 0"

I have found JSONPath plus which has a @parent property but it only appear to go up to immediate parent and I need to access from root (or work up the ladder)

JMESPath

The specs seem to indicate a filter should be expression compare expression but I cannot get it to work. There is a semi related issue and a note on current_node though it's a little unclear to me.

End of the day I am trying to achieve this:

Data

{ 
  level: 20,
  items: [{
    qty: 20,
    id: '123'
  }, {
    qty: 30,
    id: '234'
 }]
}

Expression:

$.items[?(@.qty==$.level)]

Expectations

To fetch all the items with a qty that matches level.

Suggestions on to achieve this? I am looking at expanding the JSONPath implementation for myself as it seems the only way. I am not as versed in JMESPath which I just discovered so perhaps there is actually a way to do this.

jornh
  • 1,369
  • 13
  • 27
cyberwombat
  • 38,105
  • 35
  • 175
  • 251

1 Answers1

2

Well the fantastic author of JSONPath plus added the @root feature right away.

So now:

$.items[?(@.qty==@root.level)] // Could use @parent.level for shallow stuff too
cyberwombat
  • 38,105
  • 35
  • 175
  • 251