Bidirectional Conversion
Flatten nested JSON for systems that only accept key-value maps, then unflatten back when consuming the data in application code — round-trips preserve structure exactly.
500+ fast, free tools. Most run in your browser only; Image & PDF tools upload files to the backend when you run them.
Toggle between nested JSON objects and dot-notation flat objects. Custom delimiter, array index handling, browser-only.
JSON Flatten / Unflatten is a bidirectional converter between two representations of the same data: a nested JSON object, and a flat object whose keys encode the path to each leaf value using dot notation. Flattening turns {user: {address: {city: 'Paris'}}} into {"user.address.city": "Paris"} — useful for feature flag stores, environment variable templates, or i18n translation tables that only accept key-value maps. Unflattening reverses the process for reading dot-notation config back into application objects. The tool supports custom delimiters (for keys that contain dots), two strategies for array indexes ([n] bracket notation or n delimiter), and quoted segments for keys that contain the delimiter character. All processing runs in your browser, so secret config values stay local.
Flatten nested JSON for systems that only accept key-value maps, then unflatten back when consuming the data in application code — round-trips preserve structure exactly.
Default is dot but any single character works. Use / for path-style keys or _ when keys contain dots already, avoiding ambiguity in naming conventions.
Choose between [n] bracket notation (a[0].b) which mirrors JavaScript syntax, or pure delimiter style (a.0.b) which works in tools that strip brackets.
Keys containing the delimiter character are emitted with double quotes around the segment, so flattening is reversible even with awkward source key names.
The flat dot-notation output matches the format expected by i18next, react-intl, and most translation management systems — no manual reshaping required.
Configuration values, feature flags, and translation strings stay in your browser. Nothing is uploaded, logged, or transmitted.
Input: {"user":{"name":"Alice","address":{"city":"Paris","zip":"75001"}}}
Output: { "user.name": "Alice", "user.address.city": "Paris", "user.address.zip": "75001" }
Input: {"items":[{"id":1,"qty":2},{"id":2,"qty":5}]}
Output: { "items[0].id": 1, "items[0].qty": 2, "items[1].id": 2, "items[1].qty": 5 }
Input: {"user.name":"Alice","user.age":30}
Output: { "user": { "name": "Alice", "age": 30 } }