Developer

JSON Path Finder

Query JSON values using JSONPath-style paths

Loading interactive tool…

Embed this tool on your site

About this tool

JSON Path Finder pulls a single value out of a JSON document using a simple dot-notation path. Paste JSON into the JSON input box and type a path such as $.user.posts[0].title into the Path field; the value at that location appears in the Result box, pretty-printed as JSON, and updates as you type. The leading $. is optional. Each dot-separated segment is a key name, optionally followed by one array index in brackets, for example items[2]. If a key or index is missing the result reads Path not found, and invalid JSON shows the parser's error message. The tool implements only this subset of JSONPath: there are no wildcards, filters, slices, unions, recursive descent (..) or bracket-quoted keys, a path cannot start with an array index, so arrays at the root cannot be addressed, and $ on its own does not return the whole document. Use it to check where a field lives in an API response before writing extraction code. Everything runs in your browser; the JSON is never sent to a server.

Why use it

  • Check a Path Before You Code: Confirm that $.data.items[0].id really exists in a sample response before writing it into JavaScript, a test assertion or a template.

  • Live Results: The Result box updates on every keystroke in the JSON or the Path field, so you can step down a document one segment at a time.

  • Clear Not-Found Feedback: A missing key or out-of-range index returns Path not found instead of an empty box, and invalid JSON shows the parser's error.

  • Full Sub-Trees: Point the path at an object or array and the whole sub-tree is shown as indented JSON, ready to read or copy.

  • No Library or Runtime Needed: No Node.js, Python or jq install is required — paste data and type a path in any browser.

  • Private by Design: Parsing and lookup run in your browser, so API responses containing tokens or customer data never leave your machine.

How to use

  1. Paste your JSON data into the JSON input box.
  2. Type a path into the Path field, for example $.user.name — the $. prefix is optional.
  3. Add one array index in brackets after a key to step into an array, as in $.user.posts[0].title.
  4. Read the value in the Result box; objects and arrays are shown as indented JSON.
  5. If the result says Path not found, shorten the path one segment at a time to find the key or index that does not exist.

When it helps

  • When exploring a deep or unfamiliar API response and checking which keys exist at each level.
  • When writing JavaScript like data.user.posts[0].title and wanting to confirm the path on a real sample first.
  • When pulling one nested value, such as a token or an ID, out of a long JSON payload.
  • When building test assertions that check a specific field and you want to confirm its expected value.
  • When teaching how nested objects and arrays are addressed with dot notation and indexes.

Examples

Read a nested value through an array

Input
{"user":{"name":"A","posts":[{"title":"Hi"}]}}

Path: $.user.posts[0].title
Expected result
"Hi"

Return a whole array element

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

Path: $.store.book[1]
Expected result
{
  "title": "The Great Gatsby",
  "price": 12.99
}

Path without the $. prefix

Input
{"config":{"database":{"host":"localhost","port":5432}}}

Path: config.database.port
Expected result
5432

Missing key

Input
{"config":{"database":{"host":"localhost","port":5432}}}

Path: $.config.cache.host
Expected result
Path not found

Tips

  • Build the path one segment at a time — $.data, then $.data.items, then $.data.items[0] — so you see exactly where a lookup stops working.
  • The $. prefix is optional: user.name and $.user.name return the same value.
  • Keys containing dots, spaces or brackets cannot be addressed here; use your browser console with bracket notation for those.
  • Keys are case-sensitive, so check capitalisation when a path returns Path not found.

Frequently Asked Questions

Which path syntax does the tool support?
Dot-separated key names with an optional leading $., where each segment may end with one array index in brackets: $.user.posts[0].title or user.posts[0].title. Key names cannot contain dots or brackets.
Does it support JSONPath wildcards, filters or recursive descent?
No. Expressions such as [*], [?(@.price < 10)], .., slices like [1:3] and unions like ['a','b'] are not supported and return Path not found. For those, use a full JSONPath library such as jsonpath-plus, or a command-line tool like jq.
Why does $ on its own say Path not found?
The tool only strips a leading $. (with the dot). A bare $ is read as a key named $, which normally does not exist. The whole document is already visible in the input box.
Can I query a JSON array at the root level?
Not currently. A path cannot start with an index, so $[0] and [0] return Path not found. Wrap the array in an object, for example {"items": [...]}, and use $.items[0].
How do I reach a nested array like matrix[0][1]?
Only one index per segment is supported, so matrix[0][1] returns Path not found. Look up $.matrix[0] and read the inner array in the result.
What happens with invalid JSON?
The Result box shows Invalid JSON followed by the browser's parser message, so you can fix the input before querying.
Is my JSON sent anywhere?
No. Parsing and the path lookup both run in your browser; nothing is uploaded.

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.
A LITTLE HELP. A LOT DONE.
Good tools.
Great flow.

Your shortcut to the everyday. Create, convert, calculate,
and get back to what you love.

✓ Free to use✓ No sign-up✓ 500+ possibilities