About the JSONPath Tester
JSONPath Tester runs a JSONPath expression against pasted JSON and lists every match with its normalised path and value. It supports a practical subset: the root $, dot and bracket properties, array indexes including negative ones, wildcards, unions, slices with steps, recursive descent with .., and filters such as [?(@.price < 10)] that compare @ paths with strings, numbers, true, false or null, combined with && and ||.
Expressions are read by the page’s own parser — no JavaScript is evaluated, so script expressions, functions such as length(), regular-expression matches and $ inside filters are reported as unsupported rather than guessed. Results can be copied or downloaded as JSON. JSONPath libraries differ in edge cases, so check important expressions against the implementation you use.
How to use
- Paste JSON into the data box.
- Type a JSONPath expression starting with $.
- Press Run query (or Enter).
- Review the match count, paths and values.
- Copy or download the results as JSON.
Key features
- Root, properties, indexes, wildcards and unions.
- Array slices with negative indexes and steps.
- Recursive descent (..).
- Comparison and existence filters with && and ||.
- Clear errors for unsupported syntax, with the position.
- Normalised paths and formatted values.
- Copy Results as JSON and Download .json.
Best practices
- Start broad (such as $..book) and narrow step by step.
- Use bracket notation for keys with spaces or hyphens.
- Quote string literals in filters: @.status == 'active'.
- Check no-match results for typos in property names.
- Verify edge cases with the library your code uses.
Benefits
- Quick experiments without writing code.
- Safe: queries are parsed, never executed.
- Clear paths make results easy to reuse.
- Private: data stays in your browser.
Frequently asked questions
Which JSONPath syntax is supported?
$, .name, ['name'], [0], [-1], *, unions like [0,2], slices like [1:5:2], recursive descent with .., and filters using == != < <= > >= with && and ||. Filter paths start with @ and may use names and indexes.
What is not supported?
Functions such as length() or count(), regular-expression matches, $ inside filters, ! negation and script expressions such as (@.length-1). These produce an error message instead of a guessed result.
Is my expression executed as JavaScript?
No. The page has its own JSONPath parser and evaluator, so nothing is passed to eval or similar functions.
How are comparisons handled?
== and != compare values exactly. <, <=, > and >= compare numbers with numbers and strings with strings; other combinations are false. A missing property never equals a value.
Why do I get no matches?
The expression is valid but selects nothing — often because of a misspelt key, an index out of range, or a filter applied at the wrong level.
What are the limits?
Expressions up to 500 characters, JSON up to 5 MB with 100 levels of nesting, up to 10,000 results and 1,000,000 visited values. The table shows the first 500 matches; the JSON output contains all of them.
Is anything I paste uploaded or saved?
No. Everything is processed in your browser on your device. Nothing is uploaded, no request is sent, and inputs and results are not saved in browser storage. Reset clears them from the page.