Developer Tools
JSON Key Extractor
Extract every key path from a JSON document in your browser. Get a flat, deduplicated list with value types and occurrence counts.
Path notation
Choose how each path is written. Example for this notation:store.books[*].title
Array-folded keys
19 of 19 distinct paths. Repeating array elements collapse to one row.
store
depth 11xobjecte.g. object(6)
store.address
depth 21xobjecte.g. object(3)
store.books
depth 21xarraye.g. array(2)
store.name
depth 21xstringe.g. "Corner Bookshop"
store.open
depth 21xbooleane.g. true
store.openYear
depth 21xnumbere.g. 1998
store.staff
depth 21xarray []e.g. []
store.address.city
depth 31xstringe.g. "Boulder"
store.address.street
depth 31xstringe.g. "12 Main St"
store.address.zip
depth 31xstringe.g. "80302"
store.books[*]
depth 32xobjecte.g. object(6)
store.books[*].authors
depth 42xarraye.g. array(2), array(1)
store.books[*].id
depth 42xstringe.g. "B-001", "B-002"
store.books[*].inStock
depth 42xbooleane.g. true, false
store.books[*].price
depth 42xnumbere.g. 32.5, 47.99
store.books[*].tags
depth 42xarraye.g. array(2)
store.books[*].title
depth 42xstringe.g. "The Pragmatic Programmer", "Refactoring"
store.books[*].authors[*]
depth 53xstringe.g. "Andy Hunt", "Dave Thomas", "Martin Fowler"
store.books[*].tags[*]
depth 54xstringe.g. "software", "career", "design"
Plain text output
One key per line. Drop this into code, docs, or a spec.
store store.address store.books store.name store.open store.openYear store.staff store.address.city store.address.street store.address.zip store.books[*] store.books[*].authors store.books[*].id store.books[*].inStock store.books[*].price store.books[*].tags store.books[*].title store.books[*].authors[*] store.books[*].tags[*]
What this gives you
Array-folded vs indexed
The default view collapses every array element to a single canonical path with [*] in place of indices. Toggle Show indexed paths to instead see every real index, so items[0].sku and items[1].sku appear separately instead of as one items[*].sku row with a count of 2.
Three notations
Switch between dot notation (store.books[*].title), bracket notation (store['books'][*]['title']), and JSONPath ($.store.books[*].title). Bracket form is used automatically for any field name that is not a valid identifier.
How to use
- Paste a JSON object or array into the input on the left, or click Load sample to try the tool.
- Pick the path notation: Dot, Bracket (quoted keys), or JSONPath ($.a.b[*].c).
- Use the filter box to narrow by substring, the type select to keep only paths whose value is of a given type, and Leaves only to hide object and array containers.
- Toggle Show indexed paths if you want every array index expanded instead of folded to [*].
- Click Copy on any row to grab that single path, or Copy all to send the entire filtered list to the clipboard. Turn on Include types to append the value type to each copied line.
About this tool
JSON Key Extractor walks any JSON document you paste in and produces a flat, deduplicated list of every key path that appears in it, with the value type and occurrence count at each path. The default array-folded view collapses every array element to a single canonical path with [*] in place of indices, so items[0].sku and items[7].sku appear as one row, items[*].sku, with the total number of occurrences. Toggle Show indexed paths to expand every concrete index instead. Paths can be rendered in dot notation (store.books[*].title), bracket notation with quoted keys (store['books'][*]['title']), or JSONPath ($.store.books[*].title), with bracket form used automatically for any field name that is not a valid identifier. Filters narrow the list to a substring of the path or to a specific value type (string, number, boolean, null, object, or array). A Leaves only toggle hides container rows so you see only primitive paths. Every row includes the depth, the count, the set of value types observed (so a heterogenous field shows up as string|number rather than hiding it), and up to three sample values for quick inspection. A copy button on every row grabs that single path; Copy all sends the full filtered list to the clipboard as plain text, one path per line, with optional (type) annotation per line. Useful for inspecting an unfamiliar API response, building a list of JSONPath selectors for a downstream tool, sketching a JSON Schema or TypeScript interface from a sample document, generating jq queries, drafting a CSV column list to map a JSON file into, auditing which fields appear (or do not appear) across an array of records, and any moment you find yourself scrolling a long JSON file asking what fields it actually contains. Parsing and walking run entirely in your browser, so the JSON is never uploaded.
Free to use. Works in your browser. No signup, no login.
Related tools
You may also like
JSON Formatter
Format, minify, and validate JSON in your browser.
Open tool
DeveloperJSON Flatten Unflatten
Two-way converter between nested JSON and path-keyed flat JSON.
Open tool
DeveloperJSONPath Tester
Evaluate JSONPath queries with filters, regex, and recursive descent.
Open tool
DeveloperJSON Tree Viewer
Collapsible JSON tree with search, JSONPath, type icons, and copy-by-node.
Open tool
DeveloperJSON Validator
Strict JSON validation with line and column errors and human-readable hints.
Open tool
DeveloperJSON Schema Generator
Infer a JSON Schema document (Draft 7 or 2020-12) from any JSON value.
Open tool