JSONPath Evaluator

Paste JSON and enter a JSONPath expression to extract values. Supports $, *, .., and filter expressions. 100% client-side.

JSON Input
Results
Paste JSON and enter a JSONPath expression above.

How to Use the JSONPath Evaluator

  1. Paste your JSON into the input area on the left.
  2. Enter a JSONPath expression in the expression field above the panes.
  3. Click Evaluate or modify the JSON — results update as you type.
  4. Switch modes — "Highlight Matches" shows the full JSON with matches marked, "Raw Values" shows only the matched values as a JSON array.
  5. Download results as a JSON file for further processing.

JSONPath Syntax Reference

Expression Description Example
$ Root element $
.key Child property $.name
['key'] Bracket notation (for keys with spaces) $['first name']
[n] Array index (0-based) $.tools[0]
[*] or .* All children $.tools[*]
..key Recursive descent $..name
[?(@.key)] Filter: has property $.tools[?(@.active)]
[?(@.key == val)] Filter: equality $.tools[?(@.type == 'json')]

Practical Use Cases for JSONPath

JSONPath is used across many developer workflows. In REST API testing frameworks like REST Assured (Java) and RestSharp (.NET), JSONPath assertions verify that API responses contain the expected data. In AWS CloudFormation and Azure Resource Manager templates, JSONPath-like expressions extract values from resource outputs. Kubernetes admission webhooks use JSONPath to patch resources. In Node.js applications, libraries like jsonpath and jsonpath-plus implement the standard. Testing tools like Postman and Insomnia support JSONPath assertions natively in test scripts.

Recursive Descent with ..

One of the most powerful JSONPath operators is the recursive descent operator ... It searches the entire JSON tree for the specified key at any depth. For example, given a deeply nested response, $..id will find every id field regardless of nesting level. This is particularly useful for traversing inconsistent or deeply nested API responses where the exact structure is not known in advance. The recursive descent is computationally more expensive than direct path access, so use specific paths when possible for performance.

Filter Expressions

Filter expressions allow you to select array elements that match a condition. The syntax [?(@.property)] selects elements that have the named property (truthy existence check). The syntax [?(@.property == 'value')] selects elements where the property equals a specific value. Filters can use comparison operators: ==, !=, <, >, <=, >=. These are powerful for extracting specific records from arrays of objects without knowing their index positions.

Frequently Asked Questions

JSONPath is a query language for JSON, analogous to XPath for XML. It allows you to extract specific values from JSON documents using path expressions. JSONPath is used in APIs, testing frameworks (like REST Assured), and data transformation pipelines. The syntax starts with $ to represent the root and uses dot notation or bracket notation to navigate the structure.
This evaluator supports: $ (root element), .key or ['key'] (child access), [*] or .* (all children), [n] (array index), ..key (recursive descent — searches all levels), [?(@.key)] (filter expression — returns elements where key exists), and [?(@.key == value)] (filter with equality check).
No. This JSONPath evaluator runs 100% in your browser using JavaScript. Your data never leaves your machine. There is no server-side processing, no logging, and no data collection.
A single dot (.) accesses a direct child property. For example, $.user.name accesses the name property of the user object. Double dot (..) is the recursive descent operator — it searches the entire JSON tree for the specified key at any depth. For example, $..name returns all name properties found anywhere in the document.
Filter expressions use the syntax [?(@.key)] to select array elements that have a specific property, or [?(@.key == 'value')] to select elements where a property equals a specific value. The @ symbol refers to the current element being tested. For example, $.tools[?(@.active)] returns all tool objects where the active property exists and is truthy.