Evaluate a JSONPath expression and get the matching values and their paths
Runs in your browser. Nothing you type is sent anywhere. Updated on 24 Oct 2026.A JSONPath evaluator runs an expression against your JSON and lists every match with its normalized path. On the bundled bookstore document, $..book[[email protected]<10].title returns 2 titles, "Sayings of the Century" and "Moby Dick", at $['store']['book'][0]['title'] and $['store']['book'][2]['title']. Paste your own JSON and expression; matches are highlighted in the formatted document.
| Expression | Selects | Matches |
|---|---|---|
| $.store.book[*].author | the authors of all books | 4 |
| $..author | all authors, at any depth | 4 |
| $.store..price | every price in the store | 5 |
| $..book[2] | the third book | 1 |
| $..book[-1] | the last book | 1 |
| $..book[:2] | the first two books | 2 |
| $..book[[email protected]] | books with an ISBN | 2 |
| $..book[[email protected]<10] | books under 10 | 2 |
| $..book[?match(@.author, '.*R.*')] | authors containing R (match) | 2 |
| $..* | every node in the document | 27 |
Paste the JSON response and press Format to lay it out.
Type a filter such as $..book[[email protected] < 10].title; a syntax error points at the exact position.
Open the Results tab to read the normalized path, such as $['store']['book'][0], for each match.
Click a path to copy it, or press First match on the Highlighted tab to jump to it.
This JSONPath tester runs a query against JSON you paste and shows the result three ways: a list of matching values, the normalized path to each match, and highlights on the matches inside the formatted document. The result updates as you type, so you can build an expression one step at a time and see where it goes wrong.
The engine implements RFC 9535, the JSONPath standard published by the IETF in 2024. It supports the root $, dot and bracket child access, the recursive descent operator .., wildcards, array indexes including negative ones, slices such as [1:5:2] and [::-1], and filter expressions with ==, !=, <, <=, >, >=, &&, || and !. The five standard functions are included: length(), count(), value(), match() and search(), where the last two take regular expressions in the I-Regexp form. Queries that break the standard's type rules, such as comparing a query that can return several nodes, are rejected with a message saying why.
Many older libraries, including the original 2007 JSONPath and Jayway for Java, differ from the standard in small ways: some need parentheses around filters, as in [?(@.price < 10)], which still works here; some allow script expressions or extra functions, which RFC 9535 does not. If a query from a library's documentation is rejected, the message usually names the difference.
The rest of the article, and all 6 questions about JSONPath Tester, are on the JSONPath Tester page.
Use a filter selector: $.items[[email protected] == 'active'] keeps the items whose status is active. The @ stands for each item in turn. Combine conditions with && and ||, compare numbers with < and >, and write [email protected] on its own to keep items that have an email field at all.
A single dot takes a child of the current node, so $.store.book reads one level at a time. Two dots search at every depth, so $..price finds every price field anywhere in the document, including inside arrays. Recursive descent is convenient but can match more than intended on large responses.
Use a negative index: $.items[-1] is the last element and $.items[-2] the one before it. A slice with a negative start also works, so $.items[-3:] returns the last three. Indexes past the end simply return nothing rather than an error.
Yes, with match() and search(). match(@.code, 'A[0-9]+') needs the whole string to fit the pattern, while search(@.name, 'smith') finds it anywhere. Patterns use I-Regexp, a portable subset of regular expressions, so shortcuts such as \d and lookaheads are not accepted.
Still stuck? Ask about JSONPath Tester and anybody who knows can answer. No account needed.
On the related tools: Readability Checker – Flesch reading ease and grade level, with what to change · npm Package Name Checker – Check whether a name is allowed on npm: capitals, scopes, length, core module names.