Lintify Logo
Lintify
Schema & Query

JSONPath Evaluator

Run JSONPath expressions against any JSON document and inspect every match. Supports the full RFC 9535 syntax including filters and recursive descent.

JSON document
1
Matches
Output will appear here…

Query JSON with JSONPath

JSONPath is to JSON what XPath is to XML — a string-based expression language for selecting nodes from a document. The expression $..user finds every user object at any depth. The expression$.users[?(@.age>18)] filters users by a condition. JSONPath was standardized in RFC 9535 in 2024, and Lintify uses the jsonpath-plus library which implements the standard syntax plus a few common extensions.

Type a path in the search bar at the top, paste your JSON in the input panel, and the output panel shows every match as a JSON array. JSONPath always returns a list — there is no concept of a single result in the spec — so even queries that match one node produce a one-element array.

Common JSONPath patterns

  • $.store.book[0] — the first book in the store.
  • $.store.book[-1] — the last book.
  • $.store.book[0:2] — the first two books (slice notation).
  • $..author — every author, at any depth.
  • $.store.* — every direct child of store (books and bicycle).
  • $..book[?(@.isbn)] — every book that has an isbn field.
  • $..book[?(@.price < 10)] — every book cheaper than 10.
  • $..* — every node in the document (use with care on large files).

Filters and the @ symbol

Filter expressions use the @ symbol to refer to the current node being evaluated. Inside a filter, you can compare fields of the current node with literal values or with other fields. Comparison operators (==,!=, <, >,<=, >=) and logical operators (&&, ||,!) are supported, as is a subset of JavaScript expression syntax.

When JSONPath is the right tool

JSONPath shines when you need to extract specific values from a large, deeply nested JSON document without writing a custom parser. It is commonly used for monitoring (selecting metrics from a complex response), for log analysis (pulling specific fields out of structured logs), and for one-off data extraction tasks. For production code, consider whether a proper JSON Schema validator or a typed deserializer would be more maintainable — JSONPath is great for ad-hoc queries, but it can become hard to read in larger expressions.

Frequently asked questions

Common questions about the JSONPath tool.

What is JSONPath?
JSONPath is to JSON what XPath is to XML — a string-based expression language for selecting nodes from a document. The expression $..user finds every user object at any depth, while $.users[?(@.age>18)] filters by a condition. It was standardized in RFC 9535 in 2024.
Which JSONPath syntax is supported?
Lintify uses jsonpath-plus, which implements the RFC 9535 syntax plus a few common extensions. Bracket notation ($.store.book[0].title) and dot notation ($.store.book[0].title) are both supported, as are recursive descent ($..price) and filter expressions ([?(@.price < 10)]).
Why does my query return an array even when there is only one match?
JSONPath always returns a list of matches — there is no concept of a single result in the spec. If you want a single value, take the first element of the result array. Lintify shows the matches as a list so you can see exactly which nodes were selected.
How do I filter by a nested property?
Use a filter expression with the @ symbol to refer to the current node. For example, $.users[?(@.address.city === 'Mumbai')] selects every user whose address.city equals Mumbai. Comparison operators, logical operators, and a subset of JavaScript expressions are supported.
Can JSONPath modify the document?
No. JSONPath is a read-only query language — it cannot add, remove, or update values. If you need to transform a document, parse it in JavaScript, mutate the object, and re-serialize. Lintify keeps the tool focused on querying because that is the most common use case.

Related tools