JSONPath Tester & Evaluator (RFC 9535)
Paste a JSON document and a JSONPath expression to see every matched value and its exact normalized path — evaluated in your browser against the RFC 9535 standard. Wildcards, slices, filters, recursive descent and the built-in functions all supported. No signup, nothing uploaded.
How it works
Evaluation is a pure, deterministic function of the pair (jsonDocument, expression) — no network, no randomness, no server. The engine follows RFC 9535, “JSONPath: Query Expressions for JSON”, the IETF standard published in February 2024. Four steps run on every keystroke:
- Parse the document. The JSON text is parsed per RFC 8259. If it is malformed, the tool shows the error message with its line and column and stops — a query never runs against invalid JSON.
- Parse the expression. The query is broken into segments per the RFC 9535 grammar: a leading root
$followed by child segments (.name,[…]) and descendant segments (..name,..[…]). Any syntax outside the standard raises an error with the exact character position. - Apply the selectors left to right, threading a nodelist — a list of nodes, each carrying its value and its location from the root. Name selectors pick object members (§2.3.1), wildcards take everything (§2.3.2), index selectors read array elements with negative-from-end support (§2.3.3), slices apply a half-open Python-style
start:end:step(§2.3.4), and filters keep items whose boolean expression is true (§2.3.5). A descendant segment first expands the nodelist to include each node and all of its descendants, depth-first, before applying its selector (§2.5.2). - Emit results. The final nodelist gives the matched valuesin document order and, from each node's accumulated location, the normalized path in the canonical single-quote bracket form defined in §2.7 — for example
$['store']['book'][0]['author'].
Filter expressions support comparisons == != < <= > >=, the logical operators && || !, parentheses, existence tests, and the five standard functions length(), count(), match(), search() and value() (§2.4). Comparisons are only defined between values of the same orderable type; anything else evaluates to false rather than throwing, exactly as the standard prescribes.
As a self-check, every result is round-tripped: the engine re-evaluates each match's normalized path and confirms it resolves back to the same single value. When that holds, the calculator shows “Round-trip verified”. The operator table and worked examples below were reconciled against RFC 9535 and the JSONPath Compliance Test Suite on 2026-07-17.
| Operator | What it does | RFC 9535 |
|---|---|---|
$Root identifier | The whole JSON document; every query starts here. | §2.2 |
.name / ['name']Name selector | Select an object member by key. | §2.3.1 |
* / [*]Wildcard selector | Select all members of an object or all elements of an array. | §2.3.2 |
[n]Index selector | Select array element n; negative counts from the end. | §2.3.3 |
[start:end:step]Array slice | Half-open Python-style slice, negatives and step allowed. | §2.3.4 |
[?<expr>]Filter selector | Keep items whose boolean expression is true. | §2.3.5 |
..Descendant segment | Apply the next selector to a node and all of its descendants. | §2.5.2 |
length() count() match() search() value()Functions | Built-in filter functions defined by the standard. | §2.4 |
Worked examples
Each example runs against the RFC 9535 bookstore document (three books with author, title, category and price; a red bicycle). Load it with the Sample button in the tool above.
Frequently asked questions
Sources & references
- RFC 9535 — JSONPath: Query Expressions for JSON (IETF, February 2024)
- RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format
- JSONPath Compliance Test Suite — community reference cases
The operator table and worked examples on this page were last cross-checked against RFC 9535 and the compliance test suite on 2026-07-17. The engine runs entirely client-side; if you find a query where it disagrees with the standard, email me the document and expression and I'll investigate.
Related tools
Comments & feedback
Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.
Found a bug, edge case, or want to suggest an improvement?
Email me at [email protected] — most fixes ship within 24 hours.