UtilityToolsLab

© 2026 UtilityToolsLab. Built and maintained by the UtilityToolsLab Team.

Free eBooks·About·Changelog·Privacy Policy·Terms of Service·Report a bug
HomeCode & DevJSON Path Finder

Related Tools

JSON FormatterBase64UUID GeneratorJWT DecoderTimestampRegex TesterRandom JSON GeneratorAPI Load TesterJSON Diff CheckerSchema ValidatorXML FormatterHTML FormatterCSS FormatterCSS MinifierJS MinifierHTTP Status CodesASCII Table

JSON Path Finder & Query Tool

Query any JSON document with JSONPath — wildcards, recursive descent and filters — or click through the tree to get the exact path to any node.

You Might Also Like

All Code & Dev

JSON Formatter

Paste raw JSON to instantly format, beautify, validate and minify it. Syntax errors are pinpointed by line and column. Free and fully private.

Base64

Encode text or data to Base64 and decode Base64 strings back to readable text. A fast developer utility for API payloads, tokens and data URIs.

UUID Generator

Generate RFC 4122 compliant UUID v4 strings with one click, or batch-generate up to 100 unique IDs at once. Cryptographically random and free.

JWT Decoder

Decode and inspect JSON Web Tokens. View header, payload, and signature. Detects expiry and maps all registered JWT claims.

Finding one value buried in an API response usually means scrolling a formatter until your eyes give out. JSON Path Finder replaces that with a query: type $.legs[?(@.days > 5)] and get back every matching node together with its concrete path. Both directions work, which is the useful part — you can also click any row in the document tree and the exact path to it lands in the query box.

The evaluator handles the JSONPath constructs people actually reach for: child access, array indexing including negative offsets, wildcards, slices, recursive descent at any depth, and filter expressions comparing a field against a literal. Everything runs on your own machine; no document is sent anywhere.

Walkthrough: Querying a Shipment Manifest

Press Load Sample and the editor fills with a freight manifest whose first line is "shipment": "MRD-88214". It carries six scalar fields and a legs array holding two objects, one per transport mode. Try these against it:

  • $.origin returns a single match, "Rotterdam", at path $.origin.
  • $..days reaches into the array without you naming it and returns 2 matches: 21 at $.legs[0].days and 2 at $.legs[1].days.
  • $.legs[?(@.days > 5)] keeps only the sea leg, since 21 is over the threshold and 2 is not. One match, at $.legs[0].
  • $.* returns the 7 top-level values; $..* returns all 13 nodes in the document, which is a quick way to see its true size.

What It Accepts in a Path Expression

  • Child access: $.legs or $['legs']. Bracket-quoted form is needed for keys holding a space, a dash or a dot.
  • Index and negative index: $.legs[0] for the first element, $.legs[-1] for the last.
  • Wildcard: $.legs[*] or $.*, expanding every child of the current node.
  • Slice: $.legs[0:2], with an optional step. A negative step walks backwards, so $.legs[::-1] yields the array reversed.
  • Recursive descent: $..mode finds that key at any depth, however deeply nested.
  • Filters: [?(@.days > 5)] with ==, !=, <, <=, > or >=. Dropping the operator, as in [?(@.mode)], tests only that the field exists.

Union syntax ([0,2]) and script expressions are not implemented, and neither is regex matching. A path that reaches for one is rejected rather than quietly returning nothing.

Edge Cases in Path Matching

  • Negative indices report their resolved position. Query $.legs[-1] on a 2-element array and the result is labelled $.legs[1], not $.legs[-1]. Paths that come back are always concrete, so you can paste one into code and it will still point at the same node.
  • A malformed path fails loudly. Forgetting the root gives “A JSONPath must start with $ — the root of the document.”, and a filter missing its @ names that specific mistake rather than returning an empty list.
  • Comparisons never coerce. @.days > '5' compares a number against a string and matches nothing, because ordering is only applied when both sides share a type. Use @.days > 5 without quotes.
  • Large documents are truncated in the view, not in the copy. The results list renders the first 200 matches and the tree the first 200 children of any node, but Copy Result hands back every match. Input is capped at 100,000 characters.

246/100,000 characters

Supports .key, [0], [-1], [*], [1:3], ..key for any depth, and [?(@.field > 5)] filters.

1 match
  • $

    { 7 keys }object

Document Treeclick any row to query its path