🛤️ JSONPath Tester

Query a JSON document with a simplified path syntax: $.store.books[0].title, $.store.books[*].price, or $..price for a recursive search. Supports the common subset of JSONPath — not the full spec.

The four things a path can contain

A leading $ is optional, and the rest is read as a sequence of steps. Each step filters the current set of nodes, so a wildcard early on multiplies the matches that follow.

.key      a named child          $.store.books
[0]       one array element      $.store.books[0].title   -> Dune
[*]       every element, or      $.store.books[*].title   -> Dune, Foundation
          every value of an object
..key     that key at any depth  $..price                 -> 12.99, 9.99

Key names may contain letters, digits and underscores. Anything else in the path - a stray space, a hyphen, an unclosed bracket - stops the parse with the offending fragment quoted back at you, while a path that is valid but matches nothing simply reports 0 found.

The parts of JSONPath that are missing

The document is parsed and queried entirely in your browser - nothing is uploaded - which makes it safe to try a path against a real API response.

Frequently asked questions

What is the difference between $.store.price and $..price?

The first walks one exact route and matches only a price directly under store. The second searches the whole document and returns every price at any depth, in document order - handy when you do not yet know the shape of the response.

Does this support filter expressions like [?(@.price < 10)]?

No. This is the common subset - child, index, wildcard and recursive descent. For filters, comparisons and functions you need a full implementation of RFC 9535, the JSONPath standard published in 2024.

Why does my path return 0 matches when the key is clearly there?

Usually a missing array step: $.books.title finds nothing when books is a list, because you need $.books[*].title. Key names are also case-sensitive, and an index that is past the end of the array matches nothing rather than erroring.