Skip to content
Run here 100% in your browser, no upload, no login

JSONPath Query

Query JSON with a JSONPath subset: child paths, descent, indexing and comparison filters.

Supported subset: $.a.b, $..key, [0], [*], .* and [?(@.price<10)] filters (==, !=, <, <=, >, >=).

How to use it

  1. Paste your JSON into the JSON panel — a sample store catalog loads on start.
  2. Type a query in the JSONPath field, for example $.store.book[?(@.price<40)].title.
  3. Matching values appear as a list, each labeled with the exact path where it was found.
  4. Invalid queries and unsupported syntax produce a clear error instead of silent wrong results.
  5. Try $..price to see recursive descent collect a key from every depth.

Common use cases

Why it stays private

The evaluator is a local walker over your parsed JSON. Nothing is uploaded, so payloads with internal or personal data can be inspected safely offline.

FAQ

Q: Which JSONPath features are actually supported? A: $ root, .name and .* child steps, $..name recursive descent, [n] indexes (negative counts from the end), [*], and [?(@.key op value)] filters with == != < <= > >=. Union lists, slices and script expressions are not supported and will raise an error.

Q: How do filters compare values? A: If the field is a number and the literal looks numeric, the comparison is numeric; otherwise both sides are compared as strings. Filtering on @.name == "Refactoring" uses exact string equality.

Q: Does $..key search inside arrays? A: Yes. Recursive descent visits array elements and object values at every level, so $..price finds prices inside arrays of objects as well as directly nested objects.

Your data stays on this device

JSONPath Query runs 100% locally. Everything you paste or drop is processed by your own browser and never transmitted. Nothing is stored on our servers — close the tab and it is gone.

Nothing you type is sent to a server, logged, or used for analytics. The page works even with your network disconnected after first load.