JSON to Excel (.xlsx) — Free Online
JSON to Excel converter — download any JSON array as a real .xlsx file. Native Excel number, boolean, and string types. Browser-based, no upload.
PDFFlare's JSON to Excel converter turns a JSON array of objects into a real .xlsx file you can download and open in Excel, LibreOffice, Numbers, or Google Sheets. Number, boolean, and string types are preserved natively — no broken auto-import wizard.
Need plain text instead? JSON to CSV. Markdown table? JSON to Markdown Table. SQL inserts? JSON to SQL.
How to Convert JSON to Excel (.xlsx)
Paste a JSON array
An array of flat objects — exported records, API rows, scraped data. Each object becomes a row.
Pick a sheet name (optional)
Defaults to Sheet1. Excel limits sheet names to 31 chars; longer names are truncated automatically.
Click Download .xlsx
PDFFlare assembles the .xlsx file in your browser and triggers an immediate download. Your data never leaves your device.
When Do You Need JSON to Excel?
Sharing API data with non-developers: You have a JSON export; the recipient wants Excel. Convert once, attach the .xlsx to the email instead of asking them to install jq.
Pivot tables and charts: Excel's pivot tables and built-in charts live in .xlsx — feed them with your JSON data without losing types in a CSV middle step.
Quick analytical exports: Pulled some data with a fetch + JSON.stringify? Convert to .xlsx and analyze in Excel without setting up a notebook or BI tool.
Audit-ready reports: Many ops/finance/legal workflows expect deliverables as .xlsx, not CSV. Skip the format-conversion step.
Why Use PDFFlare for JSON to Excel?
Native Excel Types
Numbers stay numbers, booleans stay TRUE/FALSE, strings live in the shared-strings table. SUM and AVERAGE work without touching Format Cells.
Real .xlsx, Not CSV
Output is a valid OOXML .xlsx — opens directly in Excel, LibreOffice, Numbers, Google Sheets. No CSV import wizard.
100% Browser-Based
The file is built in your browser. Your JSON never uploads — safe for production exports, customer data, or anything sensitive.
No Signup Required
No account, no rate limits, no watermarks on the spreadsheet.
Frequently Asked Questions About JSON to Excel
Yes. The output is a valid OOXML .xlsx — the same format Excel saves. Excel, LibreOffice Calc, Google Sheets (via upload), Numbers on macOS, and any modern spreadsheet app open it directly.
An array of flat objects. Each object becomes a row; the union of every key across every object becomes the column headers (in row 1). Missing keys render as empty cells, not nulls.
Yes. Numeric JSON values are written as native Excel numbers, so SUM, AVERAGE, sorting by value, and chart axes all work without manual type coercion. Booleans become Excel booleans (TRUE / FALSE). Strings are stored in the shared-strings table for compactness.
Cells with nested objects or arrays are JSON-stringified into a single cell. The grid stays one-row-per-object. If you want nested keys as separate columns, run the JSON through PDFFlare's Flatten tool first.
CSV loses type info — every cell becomes text until you re-parse. .xlsx preserves numbers, booleans, and dates as native Excel types out of the box. Also: CSV has no concept of multiple sheets, and double-clicking a CSV in some locales triggers Excel's broken auto-import wizard. .xlsx avoids that whole class of bug.
Date strings stay as strings in the .xlsx — Excel treats them as text. To make Excel recognize them as dates, format the cell after import (Format Cells → Date) or pre-convert to Excel serial numbers (days since 1900-01-01). True date support requires per-column type hints which the tool doesn't infer from a single sample.
No. The .xlsx is built entirely in your browser using the JSZip library. Your JSON never uploads — safe for production exports, customer data, or anything you wouldn't paste into a third-party site.
Tens of thousands of rows are fine in modern browsers. For multi-million-row imports, prefer your database's bulk-load utility with CSV. Browser memory becomes the practical limit somewhere around 100k rows depending on row width.