JSONPath Tester

Paste JSON and a JSONPath expression such as $.store.book[*].author to list every match with its normalized path. Evaluation uses jsonpath-plus in safe mode, with no code execution, and is capped at 500 matches. Use it to probe API payloads and config without writing a script. The document never leaves this tab.

Matches
  1. $['store']['book'][0]['title']"Sayings of the Century"
  2. $['store']['book'][2]['title']"Moby Dick"
2 matchesEvaluated on this device

Runs in this tab · nothing is uploaded · Verify in 10 seconds →

What the JSONPath Tester does

JSONPath is a query language for JSON, standardized in RFC 9535: expressions like $.store.book[*].author select values out of a document the way XPath does for XML. This tester evaluates your expression live against pasted JSON and lists every match with its normalized path, handy for building jq-free extractions, API response assertions and log queries.

How the JSONPath Tester works

The JSON is parsed with your browser's JSON.parse and the expression is evaluated by the jsonpath-plus library, entirely in this tab. Filter expressions such as [?(@.price < 10)] run in the library's safe evaluation mode, which interprets the comparison itself instead of handing the text to JavaScript's eval, so a pasted expression cannot execute arbitrary code. Results update as you type.

Limits

500-match cap. Safe mode: the expression cannot execute code.

~/faq

Frequently asked questions

Which JSONPath syntax is supported?

The jsonpath-plus dialect, which covers the RFC 9535 core (root $, dot and bracket notation, wildcards *, recursive descent .., array slices [0:2], unions [0,1] and filters [?(…)]) plus some extensions like the parent operator ^. Expressions from the RFC and from Goessner's original article generally work as-is.

What does the path next to each match mean?

It is the normalized form of where the value lives, always in bracket notation: $['store']['book'][0]['title']. Every match gets one, so you can copy a path back into the expression box to select exactly that value again.

Can a filter expression run arbitrary JavaScript?

No. This tester passes the library's safe-evaluation option, so filters like [?(@.price < 10 && @.category == 'fiction')] are interpreted by a restricted expression evaluator. Attempts to reach things like constructor or window fail with an error instead of executing.

Why do I get zero matches instead of an error?

A syntactically valid expression that selects nothing (a key that does not exist, a filter nothing satisfies) legitimately returns an empty result in JSONPath. Only malformed expressions and invalid JSON produce an error message.

What is the difference between $.. and $.*?

$.* selects the direct children of the root only. $.. is recursive descent: it visits every value at every depth, so $..price finds price wherever it appears in the document.

Is my JSON uploaded to run the query?

No. Parsing and evaluation both happen in this tab; the document and the expression never leave your device.