JSON to Excel Converter
Turn a JSON array of objects into a clean .xlsx workbook in your browser. No upload, no signup, no data leaves your device.
Drop your file here
Accepts JSON · Runs in your browser. Your file never leaves your device.
API responses, database query results, log dumps, and webhook payloads all tend to land in your lap as JSON. Excel is the format your stakeholders actually want to look at. This converter handles that round trip without making you write a script — drop the JSON in, get a workbook out.
The expected input is an array of flat objects: `[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]`. Each object becomes a row, each unique key becomes a column. The same parser SheetCompare uses for its diff product reads your file, then writes a single-sheet .xlsx using SheetJS. Everything happens in your browser.
Three steps, no signup
- 1
Drop your JSON
Drag a .json file into the box above, or click to pick one. The file must contain an array of plain objects — not a single object, not nested arrays.
- 2
We infer columns
Headers are the union of every key seen across your objects, in first-seen order. Rows missing a key get an empty cell for that column.
- 3
Download the .xlsx
A properly formatted Excel workbook is ready instantly. Open it in Excel, Google Sheets, or Numbers — types are preserved where Excel can recognize them.
Frequently asked questions
- What shape of JSON does this expect?
- An array of plain objects: `[{"k1": "v1", "k2": "v2"}, ...]`. The top level must be an array. Each item must be a plain object (not a nested array, not a primitive). If your data is a single object instead of an array, wrap it in `[...]` first. If it's a deeply nested tree, you'll need to flatten it before converting — see the next two questions.
- How are nested objects handled?
- Nested objects get JSON-stringified into the cell verbatim — so `{"address": {"city": "NYC"}}` produces a cell containing the literal text `{"city":"NYC"}`. We don't auto-flatten with dot-paths because the right way to flatten depends on your data (e.g., do you want `address.city` and `address.zip` as separate columns? what about arrays?). Flatten in your code first if you need each nested key as its own column.
- What happens with arrays inside cells?
- Same as nested objects — JSON-stringified into the cell. So `{"tags": ["red", "blue"]}` becomes a cell containing `["red","blue"]`. If you need one row per array item, you'll want to explode the array in your code (or in Power Query after import) rather than expect the converter to guess.
- How does column ordering work?
- First-seen order across the whole array. The first object in your JSON contributes its keys in their declared order; later objects append any new keys they introduce. This is deterministic for a given input file. If you need a specific column order, sort or reorder the keys in your JSON before converting.
- Will Excel guess types like dates and numbers?
- Yes — Excel applies its built-in type inference when it reads the resulting .xlsx. Numeric strings stay as text in the cells (which is usually what you want — leading zeros and long IDs survive), but pure JSON numbers are written as numbers. ISO date strings are stored as text by default; format the column as Date in Excel if you want them recognized.
- What if some objects are missing keys?
- Missing keys produce empty cells, not `null` or `undefined`. So if half your objects have a `phone` field and half don't, the `phone` column will exist with empty cells for the rows that lacked it. The output is rectangular — every row has every column.
- What if the JSON is huge?
- Because conversion runs in your browser, the practical ceiling is your machine's memory. JSON files up to a few hundred MB and a couple hundred thousand rows convert in seconds on a modern laptop. Beyond that, you'll see the tab freeze; for files in the gigabyte range a desktop tool or a streaming script (jq + a CSV writer) is more appropriate.