To work with nested JSON, confirm the string parses, inspect the structure as a tree, then list the keys or paths you actually need. Indentation is a reading aid. It does not tell you every field name, and it does not tell you which keys are optional on the next response.
Use the JSON Validator if the payload might be illegal. Use the JSON Formatter when you need to read a one-line body. Use the JSON Viewer to open and close objects without treating whitespace as the product. Use the JSON Key Extractor when you need names or paths such as users[].email.
A nested payload that will not parse is not a nesting problem. Trailing commas, single quotes, and comments fail before you can walk a tree. If JSON.parse throws, stop and fix the first token. The workflow guide on how to format, validate and minify JSON is the right order when you do not yet know whether the string is legal.
Empty input is not a value. Two JSON values concatenated without an array are not one document. If validate fails at position 0, look for a BOM, a PHP notice, or HTML before the first { or [.
Pretty-print shows nesting to a human. A 400-line formatted object still hides a field if you are scrolling. The viewer draws the parsed value: objects as maps, arrays as indexes, primitives as typed leaves. Collapse the branches you do not care about. That is how you work with nested JSON when the job is “where is meta.flags?” rather than “make this readable.”
The tree is the parsed structure. Duplicate keys in the source text are already gone after parse. Key order in objects is not a separate layer of meaning. Array order is data: roles[0] is not interchangeable with roles[1].
Once you can see the shape, decide what you need to write down. Top-level keys are enough for a flat config. Unique nested keys are enough when you only need field names. Key paths are the right mode when you will map the payload into code: user.address.city, items[].sku.
The extractor lists names or paths. It is not JSONPath and it does not evaluate filters. If the list stops because the node budget was hit, treat it as incomplete. Do not assume the missing path is absent from the payload.
A billing API returns:
{"user":{"id":12,"name":"Ada","address":{"city":"Muscat"}},"invoices":[{"id":"A-1","total":40},{"id":"A-2","total":15}]}
Validate: a JSON object. Format if you want to read it as text. In the viewer, open user.address and invoices[1]. In the extractor, key paths should include user.name, user.address.city, and invoices[].total. Those paths are what you take to a client, a TypeScript interface, or a schema — not the pretty-printed block.
If the next response omits address, the path you copied is still a path that existed on this sample. Nested JSON does not advertise optional keys. A second payload is the only honest check.
If you need types from this sample, that is a later step: turn an API JSON response into TypeScript types. If you need a spreadsheet, flattening nested objects into CSV cells is a conversion with limits, not a tree walk. If two documents should match, compare them structurally after you can name the paths that drifted.
Do not paste production secrets into a tab you will leave open. The viewer and extractor run in the browser on this site. The payload still sits in that tab until you clear it.
Write down the mode you used: tree walk, unique keys, or paths. Those are different artifacts. A teammate who only receives a formatted dump still has to hunt. This guide exists so “look at the nested JSON” means validate, walk, then extract — not three contradictory screenshots.
A Magento or WordPress Ajax body often wraps the record you care about under data or result. Extract paths from the wrapper you actually received, not from a trimmed example in the ticket. If the viewer shows data.items[0].sku and the ticket says sku, you are looking at two different roots. Align the root before you write a client.
Deep trees hit a node budget. The viewer and the extractor stop after a few thousand nodes. If the status says the walk was incomplete, do not treat a missing path as proof the API omitted the field. Split the payload, or extract from the subtree you opened. An incomplete list is not a schema.
When you hand work to someone else, send one fixture, the paths you used, and whether you validated first. “Here is nested JSON” without those three facts is how the next person formats the file again and still cannot find invoices[].total.
It is enough to read. It is not enough to list every path or to know which keys are optional on the next response.
Use the viewer when you need to open and close branches of a parsed value. Use the formatter when you need indented text to copy or to scan a small object.
It is a structural path: an email field on objects inside the users array. It is not a JSONPath filter and it does not mean every item has email.
After JSON.parse, duplicate keys are gone and only the parsed value remains. Inspect the tree or extract paths from that value, not from the original text.