JSONPath Tester
Query JSON with standard RFC 9535 JSONPath — filters, slices and functions — and see every match with its path.
JSON document
Matches
Paste JSON, then type a query or pick an example above. Matches update as you type.
Runs in your browser — nothing you enter leaves this device.
About this tool
What it does
The JSONPath tester runs a query against a JSON document and lists every value it selects, each with the exact path where it was found. It follows RFC 9535, the JSONPath standard published by the IETF in 2024, so the answers match other standards-based implementations rather than one of the older dialects that disagree about filters and slices. Use it to work out a query before putting it into code, an API gateway rule, a Kubernetes or Postman script, or a monitoring alert — or simply to pull a list of values out of a large response.
How to use it
- Paste a JSON document on the left, or use the RFC’s own bookstore example.
- Type a query in the box at the top, starting with $, or pick one of the examples to see the syntax.
- Read the matches on the right: each shows its normalized path, such as $['store']['book'][0], and its value.
- Adjust the query and watch the matches update as you type.
- Copy the matching values as one JSON array.
Limits and your data
- Only RFC 9535 syntax is accepted. Older forms such as [?(@.price < 10)] with parentheses work, but script expressions like (@.length-1) do not — use [-1] for the last item instead.
- The standard does not fix the order of an object’s members, so a query with .. or * over an object may list its values in a different order from another tool. Arrays always keep their order.
- match() and search() take a regular expression. A query that runs longer than 3 seconds is stopped, which protects the page from patterns that backtrack forever.
- The first 500 matches are shown; the count includes all of them.
- The document can be up to 5 MB.
- The document and the query stay in your browser. The query is evaluated in a background worker on your device, and nothing is uploaded or saved.
Questions
What is the difference between . and ..?
A single dot selects a member of the current value: $.store.book is the book list. Two dots descend to any depth: $..price finds every price anywhere in the document, including the bicycle’s.
How do I filter a list?
Put a condition in [? ]. Inside it, @ is the item being tested: $.store.book[?@.price < 10] selects books that cost less than 10, and $.store.book[?@.isbn] selects books that have an isbn at all.
Which functions can I use?
The five the standard defines: length(), count(), match(), search() and value(). match() tests a whole string against a pattern and search() looks for the pattern anywhere in it.
Why does my query from another tool not work here?
Before RFC 9535 every library had its own dialect. Script expressions, some string escapes and a few operators were never standard. The error message says where the query stopped making sense.