JSONPath Tester
Write a query, see exactly what it matches, and find out precisely where a query with no results went wrong.
Input
Syntax colouring is off for this document because recolouring something this large on every keystroke would slow typing down. Every tool still works normally.
Matches
Matches appear here.
Runs entirely in your browser. Nothing you paste is uploaded, and you can confirm that in your browser Network tab.
About this tool
This implements the part of RFC 9535 that real queries use, and says so rather than claiming the whole specification and failing on an edge case. Names, wildcards, indexes including negative ones, slices with a step, unions inside one bracket, descendant segments and filters are all supported. Filters compare a relative path against a number, a string, true, false or null, combine with and, or and not, and test for a key simply by naming it. What is not supported is named on the page and reported by name when you use it: function extensions such as length, absolute paths inside a filter, and comparisons between two paths. Matching runs over the token stream, so every result carries its own path, its line, and the value exactly as you wrote it.
How to use
- Paste your JSON into the editor, or load the sample.
- Type a query, or press one of the examples. Results update as soon as you stop typing.
- Select a match to highlight it in the editor, and read the count above to confirm the query did what you meant.
Supported syntax
| $ | The whole document |
| $.store.book | A child by name |
| $['a name'] | A name that has a space or punctuation in it |
| $.store.* | Every child of a value |
| $.book[0], $.book[-1] | An element by position, counting back from the end with a minus |
| $.book[1:4], $.book[::2] | A range of elements, with an optional step |
| $.book[0, 2], $['a', 'b'] | Several selectors at once |
| $..price | The same selector at every depth |
| $.book[?@.price < 10] | Only the values that pass a test |
| $.book[?@.isbn] | Only the values that have a given key |