JSON ⇄ Excel (XLSX) Converter
Processed Client SideTurn a JSON array into a real .xlsx workbook, or drop a spreadsheet in and get clean JSON back — entirely in your browser.
Bookmark this tool now — skip the search next time you need it.
About JSON to Excel
This tool runs entirely in your browser. Whatever you paste is processed on your own device and is never uploaded, logged, or sent to any server.
Convert a JSON array into a real .xlsx workbook you can open in Excel, Numbers, LibreOffice or Google Sheets — and drop a spreadsheet back in to get clean JSON out again. Unlike a CSV export, the file this produces is a genuine Excel workbook: numbers stay numbers, booleans stay booleans, dates stay dates, and column widths are sized to their content, so nothing has to survive a locale-dependent import wizard. The reverse direction reads .xlsx, .xls, .xlsb, .ods and .csv, turns the sheet you pick into an array of objects keyed by its header row, and can rebuild nested structure from dotted column names. Both directions run entirely in your browser — the file is never uploaded, which matters when the workbook holds customer records, payroll or anything else you cannot hand to a web service.
Key features
- Writes a true .xlsx workbook, not a CSV with a spreadsheet extension — Excel opens it without an import dialog
- Cell types are preserved in both directions: numbers, booleans and dates stay typed rather than becoming text
- Flatten nested turns nested objects and arrays into dotted column headers such as address.city and tags[0]
- Nest dotted keys does the inverse on the way back, so a round trip through a spreadsheet returns the shape you started with
- An object whose values are all arrays becomes a multi-sheet workbook — { "users": [...], "orders": [...] } produces two tabs
- Reads .xlsx, .xlsm, .xls, .xlsb, .ods and .csv, with a sheet picker for multi-tab workbooks
- Excel dates come back as ISO 8601 text (2024-01-31) instead of the raw serial numbers a naive parser produces
- Column set is the union of every key across every record, so a field that only appears on row 40 still gets a column
- Columns are auto-sized to their widest value, so the downloaded workbook is readable the moment it opens
- Live, syntax-highlighted preview of the sheet before you download, and highlighted JSON on the way back
- One click swaps direction and feeds the result straight back in, so a round trip needs no copy and paste
- Fully client-side — the spreadsheet library only loads when you convert, and your data never leaves the browser
How to use it
- Pick a direction with the swap button — JSON → Excel is the default; click it to switch to Excel → JSON.
- Going to Excel: paste a JSON array of objects into the input pane and watch the sheet preview build as you type.
- Name the sheet in the small field beside the options, leave Flatten nested on to expand nested objects into dotted columns, and keep Header row on unless the receiving system supplies its own names.
- Click Download .xlsx. The workbook lands in your downloads folder and opens straight into Excel, Numbers or Sheets.
- Going to JSON: drop a spreadsheet onto the input pane or click to browse, then pick a tab if the workbook has more than one.
- Leave First row is header on to key each object by the column headings, and Nest dotted keys on if those headings use dot notation.
- Copy the JSON, or click Download .json to save it.
Tips & common mistakes
- The top level has to be an array or an object. A bare string or number has no rows, so there is nothing to put in a sheet.
- To build a workbook with several tabs, wrap your arrays in an object: the keys become the sheet names and each array becomes a tab.
- Excel caps sheet names at 31 characters and rejects the characters \ / ? * [ ] : — those are replaced automatically and duplicates get a numeric suffix, so a long key never breaks the download.
- Turn Flatten nested off when a nested array is list data you want to keep intact. Flattened, a five-item array becomes five sparse columns; unflattened, it stays as JSON text in one cell.
- Reading a sheet back, empty cells become null rather than an empty string, which keeps the difference between "blank" and "" visible in the JSON.
- Merged cells in the source sheet only carry a value in their top-left cell; the rest read as empty. Unmerge them in the spreadsheet before converting if those rows matter.
- A date cell that is a whole day comes back as 2024-01-31; one with a time comes back as a full 2024-01-31T09:30:00 timestamp.
- If a header row has blank or repeated cells, the missing names become column_1, column_2 and duplicates get a _2 suffix — no column is silently merged or dropped.
- Prefer .xlsx over .csv whenever long IDs, phone numbers or postcodes are involved. CSV has no types, so spreadsheets turn those into scientific notation on import; an xlsx cell keeps what you put in it.
- The spreadsheet engine is around 900 KB and is only fetched the first time you download a workbook or open a file, so the page itself stays fast.