How to convert JSON to Excel
- Paste or open the JSON. An array of objects is ideal: each object becomes a row and each key a column. If the array is inside a wrapper, like
{"data": {"items": [...]}}, the converter finds it for you. Use Records to pick another array. - Check the preview. The table shows the first 200 rows exactly as they will appear in the sheet, with numbers, booleans and dates in their own colours so you can spot anything stored as text.
- Choose how nested data is flattened (see below), then click Download .xlsx. The workbook opens in Microsoft Excel, Google Sheets, LibreOffice and Apple Numbers with a bold, frozen header row and filters already on.
Need the data somewhere else? Download CSV writes a CSV that Excel opens correctly (UTF-8 with a byte-order mark). Copy table puts tab-separated rows on the clipboard, and they paste into Excel or Google Sheets as separate cells.
How nested JSON is flattened into columns
Spreadsheets are two-dimensional, but JSON is not. Nested objects are flattened by joining the key path, so {"customer": {"address": {"city": "Pune"}}} becomes a column named customer.address.city. Nested arrays need a choice:
| Nested arrays setting | "tags": ["new", "sale"] becomes | Best for |
|---|---|---|
| Join in one cell | one tags cell: new, sale | Short lists of labels. Arrays of objects fall back to JSON text. |
| JSON text in one cell | ["new","sale"] | Round-tripping the data back to JSON later |
| Separate columns | tags.0 = new, tags.1 = sale | Fixed-length arrays such as coordinates or RGB values |
| One row per item | two rows, one with tags = new and one with tags = sale. The other fields repeat on each row. | Order lines, line items, events. This is what you need to build a pivot table. |
Worked example: one row per order item
[
{ "order": 1001, "customer": { "name": "Asha" },
"items": [ { "sku": "PEN", "qty": 2 }, { "sku": "INK", "qty": 1 } ] }
]
With One row per item and expand: items, this becomes a sheet you can pivot straight away:
| order | customer.name | items.sku | items.qty |
|---|---|---|---|
| 1001 | Asha | PEN | 2 |
| 1001 | Asha | INK | 1 |
JSON to Excel type mapping
A CSV file holds only text, so Excel guesses the type of each cell, and it often guesses wrong. An .xlsx file stores the type with each cell, so this converter writes these types:
| JSON value | Excel cell | Notes |
|---|---|---|
"text" | Text | Longer than 32,767 characters (Excel's cell limit) is truncated |
"00742", "+44 20 7946" | Text | Leading zeros and plus signs are kept. In a CSV, Excel would drop them. |
42, -3.75, 1e6 | Number | Sum, sort and filter work immediately |
1453729827150749696 | Text | Excel keeps only 15 significant digits, so longer integers are stored as text to stay exact |
true / false | Boolean (TRUE/FALSE) | |
null | Empty cell | The same as a missing key |
"2026-09-24", "2026-09-24T10:30:00Z" | Date / date-time | When ISO dates as Excel dates is on. The time is kept as written and the time-zone suffix is dropped, because Excel dates have no time zone. |
| Nested object | Several columns | Or one JSON-text cell if flattening is off |
XLSX or CSV: which should you download?
| .xlsx | CSV | |
|---|---|---|
| Opens in Excel with a double-click | Yes | Yes, but the delimiter must match your region's list separator |
| Keeps leading zeros, long IDs and dates | Yes | No, Excel converts them on open |
| Header formatting, filters, frozen row | Yes | No |
| Imports into databases, pandas, BigQuery | Needs a library | Yes, universally |
| Non-English text (é, ह, 中) | Always correct | Correct here: UTF-8 with BOM |
If Excel shows your whole CSV in column A, your system uses ; as the list separator (common with German, French, Spanish and Brazilian regional settings). Choose semicolon and download again, or just use .xlsx. For CSV-only workflows, the JSON to CSV converter has more CSV options.
JSON to table: preview before you export
The preview is useful by itself as a JSON-to-table viewer. It shows every record in a grid, with missing fields left empty so gaps stand out, and it keeps the column order in which keys first appear. For deeply nested documents that are not a list of records, the JSON viewer has a tree view and its own table view for any array you select.
Open JSON in Excel without a converter (Power Query)
Excel 2016 and later, and Microsoft 365, can import JSON directly:
- Data → Get Data → From File → From JSON, and choose the file.
- In the Power Query editor, click To Table (for a list of records), then click the expand icon on the column header and choose the fields.
- Repeat the expand step for each nested object or list, then Close & Load.
Power Query is a good choice for a refreshable import from a file or URL. For a one-off conversion, pasting the JSON here is faster, and you do not have to expand every nested column by hand.
Convert JSON to Excel in code
Python (pandas)
import json, pandas as pd
records = json.load(open("orders.json"))
df = pd.json_normalize(records, record_path="items", meta=["order", ["customer", "name"]])
df.to_excel("orders.xlsx", index=False) # pip install openpyxl
JavaScript (SheetJS)
import * as XLSX from "xlsx";
const ws = XLSX.utils.json_to_sheet(records); // flat objects only
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
XLSX.writeFile(wb, "data.xlsx");
jq to CSV (command line)
jq -r '(.[0] | keys_unsorted) as $k | $k, (.[] | [.[$k[]]]) | @csv' data.json > data.csv
Frequently asked questions
How do I convert JSON to Excel?
Paste your JSON or open a .json file above, check the table preview, and click Download .xlsx. Each object in the array becomes a row, each key becomes a column, and nested objects are flattened into columns such as address.city. The conversion runs in your browser.
Does this create a real Excel file or a renamed CSV?
A real .xlsx workbook in Office Open XML format, written in your browser. Numbers, booleans and dates are stored as real Excel types, and the header row is bold and frozen with filters turned on.
How are nested objects and arrays handled?
Nested objects become dot-notation columns such as customer.address.city. For nested arrays you choose: join the values in one cell, keep them as JSON text, spread them over numbered columns, or create one row per array item with the parent fields repeated.
Can Excel open a JSON file directly?
Yes. Excel 2016 and Microsoft 365 can import JSON with Data, Get Data, From File, From JSON. You then expand each nested column by hand in Power Query. This converter does the flattening automatically and works without Excel.
Why does my CSV open in one column or show garbled characters?
One column means Excel expects a different delimiter for your region. Download with the semicolon option or use .xlsx instead. Garbled accents come from CSVs saved without a UTF-8 byte-order mark. The CSV from this tool includes one, so Excel reads it as UTF-8.
Is there a size limit?
An Excel sheet holds up to 1,048,576 rows and 16,384 columns, and the converter warns you if your data is larger. Otherwise the limit is your browser's memory. Files of tens of megabytes usually convert in a few seconds.
Is my JSON uploaded to a server?
No. Parsing, flattening and building the .xlsx or CSV file all happen in JavaScript in your browser, and the file is saved directly from the page.