UtilityKit

500+ fast, free tools. Most run in your browser only; Image & PDF tools upload files to the backend when you run them.

JSON Path Finder

Query JSON values using JSONPath-style paths

About JSON Path Finder

JSON Path Finder lets you write JSONPath expressions and immediately see which nodes they match inside a real JSON document. Paste any JSON object or array into the left panel, type a JSONPath query like $.store.book[*].author into the expression field, and the matching values appear in the results panel instantly. A node-tree view highlights the matched paths so you can trace exactly where each result lives in the document hierarchy. JSONPath is the standard query language for JSON data — similar to XPath for XML — and is used in AWS IAM policies, Kubernetes configurations, API testing tools like Postman, and JSON Schema validation. This tool removes the guess-and-check cycle of writing JSONPath in a production system: test your expression here first, confirm it returns the right nodes, then copy it into your code. It handles bracket notation, wildcard selectors, recursive descent.

Why use JSON Path Finder

Test Before You Ship

A wrong JSONPath in production code silently returns null instead of throwing an error. Validate every expression against a real data sample here before embedding it in your application, API policy, or CI configuration.

Visual Path Tracing

The node tree view highlights exactly which document nodes matched and shows their full dot-notation path. This makes it trivial to confirm that a wildcard or recursive selector isn't accidentally matching more nodes than intended.

RFC 9535 Compliant Engine

Many online testers implement informal or legacy JSONPath dialects. This tool targets RFC 9535, the 2024 IETF standard, ensuring expressions you test here behave the same in any compliant library or runtime.

Handles Real-World Payloads

Deep nesting, large arrays, numeric keys, and unicode strings in values are all handled correctly. Paste actual API responses, Kubernetes manifests, or AWS policy documents without sanitising them first.

Filter Expression Support

The ? filter syntax lets you query by value — for example $.orders[?(@.total > 100)]. Testing these conditional expressions against live data here prevents subtle off-by-one errors in filter predicates before they reach production.

No Library or Runtime Needed

You don't need Node.js, Python, or jq installed to test a JSONPath expression. This browser tool gives you instant results without a local environment, making it useful from any machine including shared or restricted systems.

How to use JSON Path Finder

  1. Paste your JSON data into the left input panel — any valid JSON object or array works.
  2. Type a JSONPath expression into the query field above the results panel, starting with $ to denote the root.
  3. Matching values appear instantly in the results panel; each result shows both the value and its full path.
  4. Use the node tree view to see the matched elements highlighted within the document structure.
  5. Iterate on your expression — modify it to broaden or narrow the selection and watch results update in real time.
  6. Click Copy next to any result to copy just that value, or copy the full results array for use in tests or documentation.

When to use JSON Path Finder

  • When writing JSONPath expressions for AWS IAM condition keys or CloudWatch metric filters and wanting to confirm them on sample policy documents.
  • When building Postman or Bruno test scripts that assert on specific response fields using JSONPath matchers.
  • When configuring Kubernetes admission webhooks or Kyverno policies that use JSONPath to extract pod spec fields.
  • When parsing a deep or unfamiliar API response and needing to explore which paths exist before writing extraction code.
  • When writing JSON Schema validators that reference data via JSONPath and needing to confirm path correctness on sample payloads.
  • When teaching or learning JSONPath syntax and wanting immediate feedback on expression results without setting up a local environment.

Examples

Extract all book titles with wildcard

Input: { "store": { "book": [ {"title": "Moby Dick", "price": 8.99}, {"title": "The Great Gatsby", "price": 12.99} ] } } Expression: $.store.book[*].title

Output: ["Moby Dick", "The Great Gatsby"]

Filter by value with predicate

Input: { "products": [ {"name": "Widget", "price": 5.00, "inStock": true}, {"name": "Gadget", "price": 149.99, "inStock": true}, {"name": "Doohickey", "price": 2.50, "inStock": false} ] } Expression: $.products[?(@.price > 4 && @.inStock == true)].name

Output: ["Widget", "Gadget"]

Recursive descent to find nested key

Input: { "config": { "database": {"host": "localhost", "port": 5432}, "cache": {"host": "redis.internal", "port": 6379} } } Expression: $..host

Output: ["localhost", "redis.internal"]

Tips

  • Start with $ alone to confirm the tool parsed your JSON correctly — it should return the entire document as a single result.
  • Use $..[*] to flatten all values in the document when exploring an unfamiliar structure and you don't yet know the key names.
  • Filter expressions can chain: $.orders[?(@.status == 'active')][?(@.total > 50)] narrows results step by step.
  • Bracket notation is required for keys with hyphens — write $['x-request-id'] not $.x-request-id, which the parser reads as a subtraction.
  • When debugging a null result, try removing the last path segment progressively until you get a match — this pinpoints the exact key that doesn't exist in the data.

Frequently Asked Questions

What is the difference between dot notation and bracket notation in JSONPath?
Both select the same nodes. Dot notation ($.user.name) is more readable; bracket notation ($['user']['name']) is required when a key contains spaces, starts with a digit, or conflicts with JSONPath operator characters.
What does the .. recursive descent operator do?
The .. operator searches all levels of the document tree, not just direct children. $..*name matches a 'name' key at any nesting depth — useful for finding a field scattered across a complex nested structure.
Can I use slice notation like [1:3] in expressions?
Yes. Array slices follow Python-style start:end:step syntax. [1:3] returns elements at index 1 and 2; [-1:] returns the last element; [::2] returns every other element.
How do filter expressions like [?(@.price < 10)] work?
The ? introduces a filter predicate and @ refers to the current node being tested. The expression $.products[?(@.price < 10)] returns all product objects whose price field is less than 10.
Does the tool support the union operator [a,b] to select multiple keys at once?
Yes. $.data['id','name','email'] selects three keys from the data object in a single expression, returning them as an array of matched values.
Is this tool compatible with the JSONPath used in Postman?
Postman uses the Goessner JSONPath dialect. Most expressions are identical; minor differences appear in advanced filter functions. If an expression works here but not in Postman, check Postman's specific filter function names.
What does the wildcard * selector match?
$ .user.* matches all direct property values of the user object. $[*] on an array matches all array elements. Combined with recursive descent, $..* matches every value in the entire document.
Can I test JSONPath against a JSON array at the root level?
Yes. If your JSON starts with [ rather than {, use $[0].field to access the first element or $[*].field to extract a field from all array elements.

Explore the category

Glossary

JSONPath
A query language for selecting nodes from a JSON document, analogous to XPath for XML. Standardised by IETF RFC 9535 in 2024.
Root Node ($)
The $ symbol in a JSONPath expression represents the top-level value of the JSON document — the starting point for all path traversals.
Recursive Descent (..)
The .. operator traverses all levels of the JSON tree, not just immediate children. $..title finds every 'title' key regardless of nesting depth.
Filter Expression
A [?(...)] predicate inside a JSONPath expression that selects only array elements or object values matching a boolean condition, e.g. [?(@.age >= 18)].
Wildcard (*)
A JSONPath selector that matches all properties of an object or all elements of an array at the current level of the path.
Slice Notation
Array subscript syntax using start:end:step (e.g. [0:5:2]) to select a subset of array elements, following Python slice semantics.