JSON Path Tester
Run a JSONPath expression against a JSON document and inspect every matching path and value. The query uses a safe, documented subset and never evaluates code.
$.store.book[?(@.price < 10)].title to select low-cost book titles.Need to check the JSON first? JSON Validator →Quick examples
Filters support one comparison or a property-existence check, such as ?(@.available == true). They do not run JavaScript.
Matches
Results appear after running a query.| Matched path | Value |
|---|---|
| Run a query to see matching values. | |
JSONPath selectors in this tester
The tester implements a safe core subset; it is not a JavaScript expression engine or a claim of full compatibility with every JSONPath dialect.
$ · $.store.bookStart at the root and select object properties with dot notation.$['store']['odd-key'] · $[0]Use quoted bracket properties, array indexes (including negative indexes), and property unions.$.items[*] · $..price · $..*Choose all immediate children with a wildcard or search descendants recursively.$.items[0:5:2]Slice arrays with optional start, end and non-zero step.$.items[?(@.price < 10)]Filter arrays with one scalar comparison: ==, !=, <, <=, > or >=.$.items[?(@.id)]Select array items where the named property exists, including values such as false or null.Query locally, inspect exact paths
The JSON input is parsed into safe data structures and the JSONPath expression is tokenized by a local parser. No expression is passed to eval, functions, or a remote service.
Results include each match's JSONPath-style location and a JSON array of values. Duplicate matches from an explicit union are preserved in query order.
Filters support one property path and one scalar comparison or an existence check. Boolean combinations, regular expressions, functions and scripting extensions are intentionally not supported.
Input is limited to 1 MiB, expressions to 4,096 characters, nesting to 256 levels and results to 5,000 matches. If a query is too broad, narrow it and run again.
Frequently Asked Questions
No. The local parser accepts only the documented filter syntax. Calls, regular expressions and arbitrary expressions are rejected.
?(@.field) checks whether the property exists, not whether its value is truthy. Use an explicit comparison such as ?(@.field == true) to match a boolean value.
No. It supports the selectors listed on this page, with a narrow safe filter grammar. Other dialects may have different operators and extensions.
No. Parsing and query evaluation run in your browser worker. Nothing is uploaded or stored by this tool.