JSON to Excel Converter Free
Convert JSON arrays directly to real Excel .xlsx files — no CSV step needed. Paste JSON, auto-extract headers, bold the header row, preview, and download. Powered by SheetJS. Runs entirely in your browser.
JSON Input
Data Preview
Showing up to 10 rows · total rows will be in the Excel file
Pro — multiple sheets, custom cell styles, formulas, batch convert, API
API access · Priority queue · Team workspace
How It Works
Paste Your JSON
Paste any JSON array of objects. Click Sample JSON to load a realistic product catalog dataset with 5 records including nested category objects, price fields, and stock counts. The converter auto-extracts all unique keys across every row as column headers, handling sparse datasets where different objects have different fields without any data loss.
Configure Options
Set the sheet name for the Excel tab, toggle bold header formatting so column names stand out, enable auto column width to fit cell content without manual resizing, and freeze the top header row so it stays visible while scrolling. Click Preview to verify the data layout in a table before downloading.
Download Excel File
Click Download XLSX to save a genuine OpenXML Excel file — not a renamed CSV. The file opens natively in Microsoft Excel, Google Sheets, LibreOffice Calc, and Numbers. Numeric values are stored as true numbers (not text) so formulas, SUM, sorting, and filtering all work correctly without any post-download reformatting needed.
JSON to Excel Features
Real Excel file generation powered by SheetJS in your browser
Real XLSX Output
Downloads a genuine OpenXML .xlsx file created by SheetJS, the industry-standard JavaScript spreadsheet library. This is not a CSV in disguise — it's a proper Excel file with sheets, cell types, and optional formatting. Numeric values are stored as numbers, booleans as booleans, and strings as strings, so all Excel formulas and data operations work natively.
Bold Header Row
When enabled, the first row containing column headers is styled with bold font weight, making it visually distinct from data rows when the file is opened in Excel or Google Sheets. This simple formatting step saves you the time of manually selecting and bolding headers after download, and makes the spreadsheet look professional right away.
Auto Column Width
Column widths are automatically calculated based on the longest value in each column, including the header text. This prevents truncated cell content and removes the tedious step of double-clicking column borders after opening the file in Excel. The calculation scans up to the first 100 rows per column to balance accuracy with performance.
Freeze Header Row
The freeze pane option locks the header row so it remains visible as you scroll down through large datasets. This is done using the Excel freeze panes feature — set to row 1 — which is supported by all major spreadsheet applications including Excel, Google Sheets, and LibreOffice. Essential for working with datasets of more than 30–40 rows.
Full Key Scanning
Column headers are extracted by scanning all objects in the JSON array — not just the first row. If your JSON is sparse (different rows have different keys), all keys from all rows are included as columns. Objects that are missing a key get an empty cell for that column. This guarantees a complete, aligned spreadsheet even from inconsistent API response data.
100% Private
SheetJS runs entirely in your browser — your JSON data never touches a server. The Excel file is assembled in browser memory and downloaded directly to your device via a Blob URL. No data is transmitted, stored, or logged at any point. Safe for business data, personal records, financial figures, employee information, and any sensitive structured data.
Free vs Pro
| Feature | Free | Pro |
|---|---|---|
| JSON input size | Unlimited | Unlimited |
| Multiple Excel sheets | 1 sheet | |
| Custom cell styles & colors | — | |
| Batch JSON file convert | — | |
| Insert Excel formulas | — | |
| REST API access | — |
Frequently Asked Questions
It is a real .xlsx file in OpenXML format, generated by SheetJS. Unlike a CSV renamed to .xlsx, this file contains proper XML structure with cell type information, formatting, and sheet configuration. Numbers are stored as numeric cells (not text), booleans as boolean cells, and strings as string cells. Formulas, sorting, and filtering work immediately without any import wizard.
Nested objects and arrays are serialized to a JSON string in the cell — for example, {"city":"NYC"} or ["admin","editor"]. This is lossless and allows you to read the raw value. If you need nested fields in separate columns, use the JSON Flatten tool first to dot-expand nested structures, then convert the flattened JSON to Excel for a fully normalized spreadsheet.
Yes — Google Sheets can import .xlsx files directly via File → Import or by dragging the file into Google Drive and opening with Sheets. All formatting (bold headers, frozen row, column widths) is respected. LibreOffice Calc and Apple Numbers also open the file correctly, as all three support the OpenXML format that SheetJS generates.
CSV is a plain text format — it has no concept of cell types, so numbers are stored as text and must be reconverted when imported into Excel, often causing formatting issues with leading zeros, dates, and large numbers. Excel (.xlsx) preserves data types natively, supports formatting (bold headers, frozen rows), and avoids the delimiter ambiguity that makes CSV frustrating for international users.
There is no artificial row limit imposed by the converter. The practical limit is your browser's available memory — very large JSON arrays (over 100,000 rows) may be slow or cause the browser tab to run low on memory, but typical datasets of tens of thousands of rows convert quickly. Excel itself supports up to 1,048,576 rows per sheet, which exceeds most real-world JSON dataset sizes.
No — SheetJS runs entirely in your browser. The JSON is parsed in-memory, the Excel file is assembled in a Blob, and the download happens directly from your browser to your device. No data is sent to any server at any point. You can even disconnect from the internet after loading the page and the conversion will still work, confirming no network calls are made during the process.