dataeng.tools

Convert JSON to Excel — Free, Private, In-Browser

JSON is a document format — hierarchical, self-describing, and typed, with numbers, booleans, nulls, and arbitrarily nested objects and arrays. Excel is the far opposite: a flat grid of cells that someone opens by double-clicking. Converting JSON to Excel is almost never for another pipeline; it's for a person. You're handing a stakeholder or a non-technical colleague a workbook they can sort, filter, pivot, and chart without a JSON parser or a line of SQL. The shape that maps cleanly is a top-level array of objects: each object becomes a row, and the union of keys across every record becomes the header. Records don't have to agree on their keys — an object missing one just leaves that cell empty, not a zero or a literal null.

Several things get reshaped on the way into cells. A nested object or array has no cell equivalent, so a value like {"a":1} is serialized to a JSON string inside a single cell rather than exploding into its own columns — the same flattening the CSV path does. Numbers are where Excel bites: every cell number is an IEEE-754 double, so an integer past 2^53 can't be held exactly. Rather than let those IDs round silently, the converter writes out-of-range integers as text so every digit survives — they land as text cells, not numeric ones. Everything writes to a single worksheet named Sheet1 inside one .xlsx workbook, so the output is one tidy file to hand off.

A worksheet is hard-capped at 1,048,576 rows by 16,384 columns — feed it a bigger record set and the overflow simply won't fit, which makes Excel the wrong target for a full extract; export to CSV or Parquet for that. And because .xlsx is really zipped XML assembled in memory, very wide or very long inputs are slower to produce than a streaming CSV. Reach for this when a human is the consumer, not a machine. The JSON is parsed and the union of keys resolved with DuckDB-WASM, then the workbook is written with SheetJS — both run entirely in your browser, so the file is never uploaded to a server.

Drop a file or click to browse

Drop a JSON file — processed locally, never uploaded

Frequently asked questions

What happens to nested objects and arrays in my JSON?
Excel cells have no nested type, so any object or array value is serialized to a JSON string inside a single cell — {"a":1} lands as the literal text {"a":1} rather than expanding into its own columns. It's the same flattening the JSON-to-CSV path uses. If you need the structure kept as real objects, or split across separate columns, pre-flatten the keys before converting or keep the data as JSON/JSONL.
How are large integer IDs handled?
Excel stores every number as a 64-bit IEEE double, so integers beyond 2^53 can't be represented exactly. Instead of letting them round silently, the converter writes out-of-range integers as text cells — every digit is preserved, but the cell is text, not a number. Watch for this if a downstream formula needs to do arithmetic on those IDs; you'd have to coerce them back first.
How many sheets does the workbook have, and is there a row limit?
One sheet, named Sheet1, in a single .xlsx workbook. A worksheet is capped at 1,048,576 rows and 16,384 columns — that's Excel's own format ceiling, not a tool limit. If your array is larger than that, the overflow won't land in the sheet; export to CSV or Parquet instead, or filter the records down before converting.
Is my file uploaded anywhere?
No. The JSON→Excel conversion runs entirely in your browser via DuckDB-WASM. Your file never leaves your device.
How large a file can I convert?
It's bounded by your browser's available memory rather than any server limit — files in the hundreds of MB are routine. DuckDB runs single-threaded here, so very large files just take a little longer.
Do I need an account?
No — it's free and requires no sign-up.

Do more with your JSON file

Related conversions