JSON Path Finder
Click any node in a JSON tree to copy its JSONPath, jq, JS, or RFC 6901 JSON Pointer path — entirely on this device.
Paste JSON, drop a file, or Load sample
Press ? for shortcuts
Do it offline:$ gron data.json
How to use it
- Paste your JSON, drop a .json file, or load the sample — small documents parse as you type; a larger one waits for the Parse button (or ⌘/Ctrl + Enter).
- Pick a node by clicking its row, or steer the tree from the keyboard: arrow keys move and fold rows, and typing letters jumps to a key by prefix.
- The path panel fills with all five forms for that node — JSONPath, jq, JS dot, JS bracket and the JSON Pointer — each on its own row with its own copy button.
- Copy one form, copy the whole bundle with ⌘/Ctrl + C, or download it as .json; the bundle carries every form plus the node's value, and Share folds the document and selection into a link.
Click any node in a JSON tree and read its address in five notations at once: JSONPath and jq for queries and filters, JavaScript dot and bracket for code, and the RFC 6901 JSON Pointer that JSON Schema and JSON Patch use. JSONPath follows RFC 9535. Copy any one form, or take all five plus the value as a bundle. Nothing you paste is sent anywhere.
Examples
{"items":[{"price":{"amount":9007199254740993,"currency":"JPY"}}]}JSONPath $.items[0].price.currency
jq .items[0].price.currency
JS (dot) items[0].price.currency
JS (bracket) ["items"][0]["price"]["currency"]
JSON Pointer /items/0/price/currencySelecting currency fills the panel with all five addresses for that node at once. Its neighbour amount is 9007199254740993, and copying it returns those sixteen digits intact — a path names a location, not a parsed value.
{"a/b":1}JSONPath $['a/b']
jq .["a/b"]
JS (dot) ["a/b"]
JS (bracket) ["a/b"]
JSON Pointer /a~1bOne key, five spellings that disagree. The four query and code forms quote a/b and leave the slash alone; only the JSON Pointer treats / as structural and escapes it to ~1 — the RFC 6901 rule that trips people first.
{"":1}JSONPath $['']
jq .[""]
JS (dot) [""]
JS (bracket) [""]
JSON Pointer /An empty string is a legal key, and every form has to say so. Its JSON Pointer is a single slash — one empty reference token — easy to misread as the document root, which is the empty pointer instead.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
The whole document is the empty pointer
Select the root and the JSON Pointer is empty, not a slash — RFC 6901 spells the whole document that way. JSONPath shows $, jq a lone dot, and the two JavaScript forms are blank.
Slash and tilde are escaped, and the order matters
A pointer keeps / as its separator and ~ as its escape, so / in a key becomes ~1 and ~ becomes ~0. Tilde is replaced first, which is why a key already spelled ~1 encodes to ~01 and still decodes back to ~1. The other four forms just quote the key.
Array items are 0-based numbers, keys are not
An element's pointer is a plain index with no leading zeros — /2, beside JSONPath $[2]. But the object key "0" also gives /0, so a pointer alone cannot tell an index from a key — the finder builds it from the real node.
A repeated key gives one address to two nodes
Declare a key twice and both nodes share one JSONPath and one JSON Pointer — the address cannot separate them. The panel raises a badge and a caution; by the last-wins rule, reading that path back returns the later value.
A path names where a value is, not what it is
The finder walks structure rather than parsing values, so the address is independent of the contents. Copy the value and its original characters return — a sixteen-digit id or a lone surrogate arrives unchanged, the surrogate wearing an advisory badge.
Common errors
Unexpected "'" at line 1, column 2 — probable cause: single-quoted strings are JSON5, not JSON; use double quotes.- A common paste: an object lifted from JavaScript source, where single quotes are legal. JSON wants double quotes on keys and strings. The tree and the path panel stay idle until it parses, and your text is untouched.
Unexpected end of input at line 1, column 17 — probable cause: the document is incomplete or truncated.- The document stops before it closes — usually a fragment copied without its final braces. The parser reports where it ran out, so you add the tail and the tree completes.
Input is larger than the 50 MB limit for this tool. For bigger documents use the CLI: gron data.json- The finder refuses the file rather than index a truncated slice, whose addresses and line numbers would point into bytes that were dropped. gron writes one assignment line per value for a file of any size, locally and just as privately.
FAQ
What is a JSON Pointer, and what reads one?
It is the RFC 6901 way to point at one place in a document: reference tokens joined by slashes, like /items/0/price. JSONPath and jq are query languages; a pointer is a single exact address, which is why JSON Schema $ref, JSON Patch (RFC 6902) and OpenAPI rely on it.
Can I type a path here and jump to that node?
No — this tool runs the other direction: you click a node and it hands you the address. Evaluating a written JSONPath or jq filter is a query tool's job; resolving a typed pointer against a document is a separate tool again.
When should I copy the JSON Pointer instead of the other four?
Reach for it when a spec-driven consumer will read the path: a $ref in JSON Schema or OpenAPI, or an op path in a JSON Patch. Keep JSONPath and jq for queries, and the JavaScript spellings for pasting into source.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Re-run the parse now, at any size.
- ⌘/Ctrl + S
- Download the selected node's path bundle as .json — this overrides the browser's save dialog.
- ⌘/Ctrl + C
- With nothing selected, copy the active node's path bundle; a selection still copies itself.
- ⌘/Ctrl + Shift + C
- Force-copy the path bundle, whatever is selected.
- t
- Cycle the color theme (single key; idle while you type, and honors the kill switch).
- ? or ⌘/Ctrl + /
- Open the shortcut help, including the tree's own navigation keys.
- Esc
- Close the topmost overlay; focus returns to its opener, never the input.