Run $..price in most online JSONPath testers and you get this:
[8.95, 12.99, 8.99, 22.99, 19.95] Five numbers. Which one is the bicycle? You end up counting array indexes by hand.
I built a tester that shows where each result came from:
$.store.book[0].price 8.95 $.store.book[1].price 12.99 $.store.book[2].price 8.99 $.store.book[3].price 22.99 $.store.bicycle.price 19.95 Every path is copy-pasteable into your code.
Two more things it does differently
No type coercion. "10" sorts before "9" as a string, so a filter that quietly coerces your IDs works on test data and breaks at double digits. This one returns no match instead of a wrong one.
Bad expressions fail loudly. You get an error with a position, not an empty result you have to guess about.
It follows RFC 9535, runs in your browser, and has no dependencies.
Try it: formatstack.tech/tools/json-query
Want the parser bug that ate my whole day? It's in the full build notes.
Which JSONPath tool do you use, and has it ever returned the wrong match?

