JSONPath Tester

Test JSONPath expressions against your JSON and see the matched values live. Supports child access, wildcards, recursive descent, array indexes, and slices. Runs in your browser.

2 matches

[
  "Nigel Rees",
  "Evelyn Waugh"
]

About this tool

JSONPath is to JSON what XPath is to XML: a compact query language for reaching into a nested document and pulling out the values you want. This tester lets you paste a JSON document and an expression and see the matched values update instantly, which is invaluable when you are debugging an API response or writing a JSONPath for a tool like a CI pipeline, a log processor, or a no-code integration. It supports the constructs people actually reach for: the root ($), dot and bracket child access ($.store.book and $.store['book']), array indexing including negative indexes ([-1] for the last element), the wildcard (* and [*]) to take every child, array slices ([0:2]), and recursive descent (..) to find a key at any depth. Filter expressions ([?(...)]) are out of scope. Everything is evaluated locally in your browser, so even sensitive API payloads never leave your machine.

How to use it

  • Paste your JSON document.
  • Type a JSONPath expression, or click a sample.
  • Read the matched values and the match count.
  • Refine the expression until it selects exactly what you need, then copy it.

Frequently asked questions

What JSONPath syntax is supported?
Root ($), child access by dot or bracket ($.a.b and $["a"]["b"]), array index including negatives ([0], [-1]), wildcard (* and [*]), array slice ([start:end]), and recursive descent (..key or ..* to match at any depth). Filter expressions like [?(@.price<10)] are not supported.
What does recursive descent (..) do?
It searches every level of the document for the following key. $..author returns every "author" value anywhere in the tree, regardless of how deeply nested, which is handy when you do not know or care about the exact path.
How do negative array indexes work?
A negative index counts from the end: [-1] is the last element, [-2] the second-to-last. So $.items[-1] grabs the final item without needing to know the array length.
Why does my expression return an empty list?
Either the path does not exist in the document, or there is a typo (a wrong key name or a missing $). The tester returns all matches, so an empty result means nothing matched — check key names and array bounds.
Does this match the behavior of server-side JSONPath libraries?
For the supported constructs, yes — it follows the common Goessner-style semantics. Behavior can differ between libraries for edge cases (especially filters and unions), so verify against your specific runtime when using advanced features.
Is my JSON uploaded anywhere?
No. Parsing and evaluation run entirely in your browser with no network request, so confidential payloads stay on your device.

Related tools