JSONPath Tester — Online JSONPath Evaluator
🔒 Runs in your browser — nothing is sent to a serverJSONPath tester for live evaluation of any expression against a JSON document. Paste your JSON on the left, type a JSONPath query in the input above, and watch the matched values and concrete paths update as you type — no submit button, no upload. Wildcards (`[*]`), recursive descent (`..`), array slices (`[0:3]`), filter predicates (`[?(@.price < 10)]`) and the standard root anchor `$` all work, powered by the popular `jsonpath-plus` library. Everything runs 100% inside your browser; the JSON and the expression never leave your device, nothing is uploaded, logged or sent to any server.
Cheatsheet — JSONPath syntax
$— root document.field— child by name..field— recursive descent (any depth)[*]— every element of array/object[0]— element by index[0:3]— slice (start:end)[?(@.price < 10)]— filter expression[?(@.tag == 'fiction')]— equality filter[(@.length-1)]— last element$.store.book[*].author— every book's author
Why test JSONPath in the browser
JSONPath is a small language with a lot of nuance — the difference between `[*]` and `[0:]`, the exact precedence inside a filter, the handful of operators each engine adds on top of the original spec. Reading a written-down query is rarely enough to know what it returns. A live JSONPath tester removes the doubt: paste a real document, type a candidate expression, see the matches update on every keystroke, including the concrete paths for each match. This is also the safest way to iterate on a query that will eventually run against production data — none of the JSON or the expression ever leaves your browser, so there is no risk of leaking PII to a SaaS evaluator that quietly logs requests.
How filters and recursive descent compose
The two most powerful JSONPath constructs are recursive descent (`..`) and filter expressions (`[?(…)]`). Combined, they replace whole loops of imperative code. `$..book[?(@.price < 10)].title` walks every nested object looking for `book` arrays, applies the price filter to each candidate, and returns just the titles — three operations in one expression. The JSONPath tester shows both the matched values and the paths so you can validate not only that the right data came back, but that it came back from the right places. This matters when the same key name appears in multiple parts of a payload: the path tells you which instance fired the filter.
Examples
$.store.book[*].title["Invisible Cities", "Ficciones", "TAOCP"]$.store.book[?(@.price < 10)][{"category":"fiction","author":"Borges","title":"Ficciones","price":8.99}]$..author["Italo Calvino", "Borges", "Donald Knuth"]$.store.book[0:2].title["Invisible Cities", "Ficciones"]