JSON to Excel Converter
Nothing leaves your browser — parsing, preview, and export all run locally in JavaScript.
Why this JSON to Excel converter processes files in your browser
Search "json to excel" and most of the results — conversiontools.io, jsontoexcel.net, tableconvert.com, Aspose, dataconverter.io — work the same way: you upload your file to their server, they convert it, and you download the result. For a public API sample that's fine. For a customer export, an internal API dump, or anything with names, emails, or pricing in it, sending that file to an unfamiliar third-party server is a real risk most people don't think about until it's too late.
This tool never uploads anything. Parsing, flattening, and building the .xlsx file all happen with JavaScript running in your own browser tab. Close the tab and the data is gone — there's no server-side log, no temp file, nothing to worry about. It's the same reason our invoice generator and the other tools on this site work this way.
How it works
Paste JSON directly into the text box, or drop a .json file onto the page. The tool parses it and shows a live preview of the first 50 rows before you download anything, so you can catch a wrong record shape before committing to an export.
Nested objects are flattened using dot notation — a customer object with an address sub-object becomes columns like address.city and address.zip rather than a single unreadable JSON blob in one cell. Arrays of plain values (tags, categories, IDs) are joined into one cell with a semicolon separator, which keeps the row-per-record shape spreadsheets expect instead of exploding into a messy one-to-many join.
If your root JSON object contains more than one array — say both a customers array and an orders array — the tool detects that and offers a "one sheet per array" option, so you get a multi-tab workbook instead of losing one of the datasets. This is a gap in most of the free converters we checked, which only handle a single flat array.
What's included
Auto-detected column types (numbers, ISO dates, booleans) applied as real Excel number formats — not text that looks like a number. A frozen header row and an auto-filter dropdown on every column, on by default, so the file is usable the second you open it rather than needing manual formatting first. Files up to roughly 50MB are supported; very large files are processed in the browser's main thread, so expect a brief pause while a big file parses rather than a frozen page.
Export as .xlsx (built with the same exceljs engine used across every template on this site) or as plain .csv if that's what your downstream tool expects. Both exports use the exact same flattened data you see in the preview.
Limitations, and when to reach for something else
This tool is built for JSON that's shaped like a list of records — API responses, exports, log lines — not for deeply irregular or recursive structures (a JSON tree with unpredictable nesting depth won't flatten into a clean spreadsheet, by nature of the format mismatch). Arrays of objects nested inside a row (not at the top level) are preserved as a JSON string in the cell rather than expanded, so you don't silently lose data, but you may need a second pass for deeply nested collections.
If you're converting XML instead of JSON, use the XML to Excel converter linked below — same flattening logic, adapted for elements and attributes. If you're trying to see what changed between two exports rather than converting a single file, the Compare Spreadsheets tool is the right one.
Need a spreadsheet built to run your business, not just hold data?
These converters get your data into a spreadsheet. Our templates go further — dashboards, automations, and data validation built in, tested to the cent, in matching Excel and Google Sheets versions.
Frequently asked questions
Is my JSON data uploaded anywhere?
No. Parsing and the Excel/CSV export both run in your browser using JavaScript — nothing is sent to a server. You can disconnect from the internet after the page loads and the tool still works.
How are nested objects handled?
They're flattened using dot notation. { "address": { "city": "Reno" } } becomes a column named address.city. This keeps every record on one spreadsheet row instead of splitting into multiple sheets or losing the nested data.
What happens to arrays inside my JSON?
Arrays of plain values (strings, numbers) are joined into a single cell separated by semicolons, e.g. ["vip","beta"] becomes "vip; beta". Arrays containing objects are preserved as a JSON string so no data is lost, since flattening them into rows would multiply your record count unpredictably.
My root object has more than one array — can I get both as separate sheets?
Yes. When the tool detects multiple top-level arrays (e.g. both "customers" and "orders"), it offers a "one sheet per array" option that splits each into its own tab in the same workbook, with the array's key used as the sheet name.
What's the largest file this can handle?
Roughly 50MB comfortably. Because JSON.parse and the Excel export both run in your browser's single JavaScript thread, very large files can cause a brief pause while processing — there's no hard crash, just a wait, and the page stays responsive between steps.