Skip to JSONPath tester
Edwin Lab

JSONPath Tester

Select values from a JSON document and inspect the exact paths that matched. This tool supports a selector-only subset of JSONPath Plus. Filters and JavaScript expressions are disabled. It is not a full RFC 9535 implementation.

Strict JSON, up to 5 MiB UTF-8 and 100 levels deep. Duplicate keys and unsafe numbers are rejected.

Limit: 4 KiB, 64 selector segments, and 128 union members. Examples: $.store.book[0].title, $..price, $.store.book[0,2], $.store.book[:2].

Add JSON and a selector, then select Run query.

Matches

How to test a JSONPath selector

  1. Paste strict JSON into JSON input.
  2. Enter a selector beginning with $. Use property names, indexes, wildcards, recursive descent, unions, or nonnegative slices.
  3. Select Run query. Each result includes its bracket-notation path and value; no matches is an empty array.

For example, $.store.book[*].title selects each book title, while $..price selects price members at any depth.

Supported selectors

Dot properties use ASCII identifiers. Bracket properties use quoted ASCII keys; indexes are nonnegative safe integers. Wildcards, ..name/..*, homogeneous property or index unions, and nonnegative slices with exclusive end are supported. Duplicate union matches are retained.

Filters such as [?(@.price < 10)], computed/script expressions, negative indexes, escaped or Unicode keys, parent/property operators, and other advanced selectors are rejected. This is a deliberately narrow JSONPath Plus subset.

JSON values, precision, and limits

JSON is validated in a worker before parsing. Duplicate decoded object keys, non-finite or unsafe numeric values, nonzero underflow, and nesting beyond 100 levels are rejected. JavaScript numbers use binary floating-point precision: this tool reports parsed values, not the exact original numeric spelling, escapes, or negative zero. Quote large identifiers as JSON strings. Literal own properties named __proto__, constructor, or prototype remain data.

Selectors are limited to 4 KiB, 64 segments, and 128 union members. Results are limited to 2,000 candidates, 2 MiB UTF-8, and a 2-second worker deadline. Input is not sent over the network, stored, or placed in the page URL.

Why do filters fail?

Filters and JavaScript expressions are intentionally excluded to keep the accepted selector grammar small.

How do I read a path?

Every path uses absolute bracket notation such as $['store']['book'][0]['title'].

Is my JSON uploaded?

No. Parsing and selection run in a local worker in this browser.