JSON tools

JSONPath testerfind the value and its location

Try the price filter, then inspect matching values and normalized paths. Switch off auto-run for deliberate queries.

JSONPath tester

JSON input

JSON stays in this browser. Only expressions you explicitly save are stored locally.

Matches

Normalized pathValue

Each value preview shows up to 1,200 characters. Copy and download include the full selected view.

RFC 9535 · jsonpath-rfc9535 1.3.0 · No JavaScript expressions

Result is out of date; export and sending are disabled.

Continue in another tool

Opens a new tab after you click. Data travels in memory, not in the URL. Transfer limit: 500,000 characters.

A JSONPath tester helps when an API response contains the right data somewhere inside nested objects. Finding a value is only half the task: its path tells you which record produced it.

This JSONPath evaluator uses a single named dialect rather than silently trying several. Compare a narrow JSONPath expression with a recursive query before using it in your own application.

Why use this JSONPath tester?

Keep a match attached to its location

The JSONPath tester pairs each value with normalized paths such as $['store']['book'][0]. Two identical values can belong to different records; the table preserves that distinction instead of hiding their origins.

Two selected branches in a data tree correspond to two matching value cards and their location trails.

Continue with the right data

Choose the original document or the matched values array before sending it to another tool. Object selections can become CSV rows; scalar matches remain available for JSON formatting. No transfer starts just because a query completed.

A full document or a selected subset can be sent to a formatted document or a table.

Build a query you can explain

01

Start with a specific branch

Use the book-title example to select one field per record. Recursive descent searches every depth, so $..price includes the bicycle price as well as book prices. Compare paths before broadening a query.

02

Control when evaluation runs

Auto-run waits 350ms after edits. Turn it off to use Run query or Ctrl/Cmd+Enter. Editing JSON or the expression immediately makes the old result unavailable for copying, downloading and sending.

03

Check the exported shape

Values are always exported as an array of matches, even for one match. Paths view exports an array of normalized path strings. Saving an expression stores only that expression, up to 20 entries in this browser.

From nested records to useful selections

Filters with a defined meaning

Select books with $.store.book[?@.price < 10], combine conditions with && or ||, and use standard length, count, match, search and value functions. The engine parses these expressions; it does not treat them as JavaScript code.

Several ways to reach a node

Child names, wildcards, recursive descent, negative indices, slices and selector lists let you narrow a nested response. A repeated selector can produce repeated matches; the result is not automatically deduplicated.

An empty result is still a result

A valid query with no matches exports []. A property whose value is null is a real match and exports [null]. The match count distinguishes these cases, while syntax failures show an error and disable export.

Reusable queries and complete exports

Load a saved expression against a different document without replacing that document. Deletion has a preview and one undo. Results appear 50 at a time with 1,200-character value previews; copying and downloading use the full accepted result.

Know the dialect and the limits

One RFC implementation
This page uses jsonpath-rfc9535 1.3.0, based on RFC 9535. It is not a compatibility switch for Jayway, Goessner, kubectl or JSONPath Plus extensions. jq pipelines, JMESPath, custom functions and embedded JavaScript are not accepted.
Strict JSON and numeric boundaries
Comments, JSON5, trailing commas and duplicate keys are rejected. Unsafe integers and numeric overflow are also rejected before parsing. Ordinary decimals use JavaScript numbers; exponent spelling, trailing zeros and negative zero are not preserved in output.
Bounded execution
Limits are 500,000 input characters, depth 100, 50,000 nodes, 2,000 expression characters, 5,000 matches and 2,000,000 combined output characters. A worker is stopped after 2 seconds. Limits produce errors, not partial downloadable results.
Selection does not reshape data
Queries select existing nodes; they do not update records, group rows or create new objects. CSV transfer accepts an object or an array consisting entirely of objects. An array of scalar matches is not automatically wrapped into rows.
Explicit local workflow
There is no file or URL import, cloud query sync or data-bearing share link. Expressions are stored only after Save. Transfer opens a new tab through a same-origin memory handshake, requires this tab to stay open, and accepts at most 500,000 characters.

JSONPath tester questions

Which JSONPath dialect is supported?

This JSONPath tester uses jsonpath-rfc9535 1.3.0 and RFC 9535 syntax. Standard filters and functions are available, but expressions written for a vendor-specific extension may need rewriting.

Why is my expression returning nothing?

Check the root, property spelling, letter case and array level. No match produces []; it is not a parser failure. Test a shorter prefix or use the root example to confirm the data structure first.

Why does my filter expression fail?

Check the current-node marker @ and use JSONPath operators rather than JavaScript methods. The expression error identifies a line and column when the parser provides a location. Unsupported function names are errors too.

What does $..key return?

Recursive descent finds matching child names at every depth. $..price includes prices beneath both books and the bicycle; $.store.book[*].price only follows the book branch. Use the paths to inspect which nodes were selected.

Can a filter expression execute arbitrary JavaScript?

No. The JSONPath tester parses the expression using its RFC engine and does not evaluate arbitrary JavaScript. Standard match and search functions still perform regular-expression work, which remains subject to the worker time limit.

Found a query this tool handles incorrectly?

Try the sample query

Use the JSONPath tester to compare the price filter with recursive descent. Inspect the paths, then choose whether your next tool needs the original document or only the selected values.