A LITTLE HELP. A LOT DONE.
Good tools.
Great flow.
Your shortcut to the everyday. Create, convert, calculate,
and get back to what you love.
✳
✳
✓ Free to use✓ No sign-up✓ 500+ possibilities
About this tool
JSON to XLSX converts a JSON array of objects into a downloadable Excel workbook (.xlsx). The first object's keys define the column order; subsequent rows reuse those columns and append any new keys at the end so no data is lost when objects vary slightly. Object and array values inside cells are JSON-stringified — Excel cells must be scalar — preserving the data for later parsing while keeping the spreadsheet importable. Sheet name and file name are configurable; both are sanitised to remove characters that Excel rejects (slashes, brackets, asterisks). The tool uses SheetJS loaded from CDN to write the OOXML format directly in the browser, then triggers a save through a Blob URL. The entire pipeline runs locally — JSON containing tokens, customer records, or financial data is never uploaded.
Why use it
Browser-Only Privacy: JSON is converted and the XLSX file is generated entirely in your browser via SheetJS — no server round-trip means tokens, PII, and financial data never leave your tab.
Stable Column Order: The first object's keys define the column order, and any new keys from later objects are appended at the end — irregular JSON does not lose data, and the schema stays predictable.
Sheet & File Name Customisation: Set the visible sheet tab name and the saved filename without renaming after download — useful when batching multiple exports for archival.
Nested Object Preservation: Object and array values are JSON-stringified into their cells so the structure is recoverable later — Excel cells must be scalar, but the JSON content is intact.
OOXML Format: Output is a standard .xlsx file, opened by Excel 2007+, Google Sheets, Numbers, LibreOffice, and every spreadsheet tool used in the last fifteen years.
Live Preview: Verify the column order and value formatting against a 50-row table before downloading, catching schema mistakes without opening Excel.
How to use
- Paste a JSON array of objects into the input panel — typically what an API or database query returns.
- Set a Sheet name (defaults to Sheet1) and a File name (defaults to export). Both are sanitised for Excel compatibility.
- Click Preview to see the first 50 rows rendered as a table, with the column order coming from the first object's keys.
- Click ↓ Download XLSX to generate the workbook and save it to disk via your browser's download dialog.
- Open the downloaded .xlsx in Excel, Google Sheets, Numbers, or LibreOffice — all support OOXML.
- Use Clear to reset the form and start over with a different JSON payload.
When it helps
- Sharing API response data with non-developer stakeholders who use Excel for analysis.
- Producing weekly or monthly Excel reports from JSON output of a backend job.
- Generating an Excel-friendly export from a JSON file in version control for stakeholders to review.
- Converting database query results (returned as JSON by a tool) into Excel for ad-hoc filtering and pivoting.
- Creating sample Excel files for application tests by hand-writing JSON fixtures and converting them.
- Preparing data exports for finance, operations, or sales teams who insist on .xlsx format.
Examples
Input[{"id":1,"name":"Alice","city":"Paris"},{"id":2,"name":"Bob","city":"Berlin"}]
Expected resultExcel sheet "Sheet1":
| id | name | city |
|----|-------|--------|
| 1 | Alice | Paris |
| 2 | Bob | Berlin |
02Mixed keys (later object adds field)
Input[{"id":1,"name":"Alice"},{"id":2,"name":"Bob","role":"admin"}]
Expected resultExcel sheet:
| id | name | role |
|----|-------|-------|
| 1 | Alice | |
| 2 | Bob | admin |
03Nested object stringified
Input[{"id":1,"meta":{"role":"admin"}}]
Expected resultExcel sheet:
| id | meta |
|----|-------------------|
| 1 | {"role":"admin"} |
Tips
- Excel sheet names cannot contain : / \ ? * [ ]; the tool sanitises them automatically but watch the trimmed result.
- Sheet names are also limited to 31 characters in Excel — longer names are truncated by the tool to avoid file corruption.
- Nested objects and arrays in JSON values are JSON-stringified into Excel cells. Use a separate column or pre-flatten with json-flatten-unflatten if you need scalar values for sorting or formulas.
- If multiple objects have different keys, the column order is taken from the first object plus any new keys appended at the end — sort or reorder objects first if a specific column order matters.
- For very large arrays (>100K rows), generation slows because SheetJS writes the whole file in memory — split into multiple sheets or files for huge datasets.
Frequently Asked Questions
Is my JSON uploaded to a server?⌄
No. JSON is converted and the XLSX file is generated entirely in your browser using SheetJS. Tokens, PII, and exports stay in your tab — the only download is the user-initiated save.
What if my JSON objects have different keys?⌄
The first object's keys define the initial column order. Any new keys introduced by later objects are appended at the end — no data is dropped, and the column order remains predictable.
Can it export multiple sheets at once?⌄
Not in this tool — one JSON array becomes one sheet. To produce a multi-sheet workbook, run the tool multiple times and combine the .xlsx files in Excel, or use a SheetJS-based script.
How are nested objects and arrays handled?⌄
They are JSON-stringified into the cell — Excel cells must be scalar, but the JSON content is preserved so you can parse it later. For scalar values, pre-flatten the JSON with json-flatten-unflatten.
What is the maximum number of rows?⌄
Excel itself supports up to 1,048,576 rows per sheet. In practice, browser memory limits this tool to ~100K rows comfortably; beyond that, generation slows noticeably.
Will the file open in Google Sheets and Numbers?⌄
Yes. The output is a standard .xlsx file (OOXML) and opens cleanly in Google Sheets, Apple Numbers, LibreOffice, and Excel. No proprietary extensions are used.
Why is my sheet name truncated?⌄
Excel limits sheet names to 31 characters and forbids the characters : / \ ? * [ ]. The tool truncates and sanitises automatically — set a shorter name to avoid the truncation.
How are date strings handled?⌄
They are written as text strings, not Excel date serial numbers. To get Excel-native date types, post-process the file or convert the JSON values into JavaScript Date objects before exporting (a workflow not exposed in this UI).
Glossary
- XLSX
- The modern Excel file format based on Office Open XML, packaged in a ZIP archive. Default since Excel 2007 and supported by Google Sheets, Numbers, LibreOffice, and every modern spreadsheet tool.
- OOXML
- Office Open XML — the ISO standard markup language used by .xlsx, .docx, and .pptx files. Each cell, formula, and style is XML inside a ZIP package.
- SheetJS
- An industry-standard JavaScript library for reading and writing spreadsheet formats including XLSX, XLS, CSV, and ODS. Loaded from CDN only when needed.
- Sheet
- One tab within an Excel workbook. This tool generates a single-sheet workbook; the sheet name appears as the tab label inside the file.
- Column order
- The left-to-right sequence of columns. Derived from the first object's keys, with later-introduced keys appended on the right so no data is dropped.
- Blob URL
- A temporary in-memory URL pointing to binary data, used here to trigger the file download without server upload. The Blob is reclaimed when the page closes.