ObPath
ObPath matches path expressions against objects, much like jsonpath does.
To install run "npm install -g obpath".
This should allow you to run obpath like this to get books that cost more than 10 simoleons:
wget "https://raw.githubusercontent.com/bloglovin/obpath.js/master/testdata/data.json"cat data.json | obp ".store.books[*](gt(@.Price, 10))"
Some sample queries:
".store"".store.books"".store.*""..Author"".store.counts[*]"".store.counts[3]"".store.counts[1:2]"".store.counts[-2:]"".store.counts[:1]"".store.counts[:1].Price""..books[*](has(@.ISBN))"".store.books[*](!empty(@.ISBN))"".store.books[*](eq(@.Price, 8.99))"".store.books[0:4](eq(@.Author, \"Louis L'Amour\"))""..books.*(between(@.Price, 8, 10)).Title""..books[*](gt(@.Price, 9))""..books[*](has(@.Metadata))""..books[*](contains(@.Title, 'R')).Title""..books[*](cicontains(@.Title, 'R')).Title"".store.*[*](gt(@.Price, 18))"
Programmatic usage
var obpath = ; ; { var context = obpath; // Get all trees up until the second last one var trees = obpath; var data = "trees": "Elm" "Oak" "Fir" "animals": "Cat" "Dog" "Horse" ; var result = trees; result;}