LocalFirstTools.com — data tools that never leave your device
No upload — everything runs on your device

JSONPath Tester

Query JSON with JSONPath and inspect every match. Nothing is uploaded.

The JSONPath Tester evaluates an expression like $.store.book[*].author against pasted JSON locally and lists every match with its normalized path; nothing leaves the tab.

Matches
  1. $['store']['book'][0]['title']"Sayings of the Century"
  2. $['store']['book'][2]['title']"Moby Dick"
2 matchesEvaluated locally — nothing leaves this tab

What does the JSONPath do?

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 does the JSONPath work?

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.

Does this upload my JSON?

No. This page never sends your input to a server — formatting, decoding and hashing all run in this tab, on this device.How that works.

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.

Related tools

Browse alljson toolsor thefull tool directory.