How to Convert JSON to CSV in Excel
JSON is what APIs hand you. Excel is where the analysis actually happens. Getting from one to the other sounds trivial until you try it — Excel has no “open JSON” command, nested objects have no obvious spreadsheet equivalent, and the moment you do get the data in, Excel quietly rewrites half of it.
There are three practical routes. Here is how each works, and when to reach for it.
Method 1: Power Query, inside Excel
Excel can read JSON natively through Power Query. No add-ins, no external tools, and the import is repeatable — which matters if the same file lands on your desk every week.
- 1Open Excel and go to Data → Get Data → From File → From JSON. On Mac, this is Data → Get Data (Power Query), available in Microsoft 365 and Office 2021 onward.
- 2Select your .json file. Power Query opens and shows a list of records.
- 3Click To Table in the toolbar, then accept the defaults in the dialog. You now have a single column of records.
- 4Click the expand icon (⇔) on the column header, tick the fields you want, untick “Use original column name as prefix”, and click OK.
- 5Click Close & Load. The data lands in a worksheet.
- 6To produce a CSV, use File → Save As and choose CSV UTF-8 (Comma delimited).
When Power Query is the right choice
When the conversion is recurring. A Power Query step is saved with the workbook, so next month you drop in a new file and hit Refresh rather than repeating the whole process. It also handles genuinely large files better than anything browser-based, because it streams rather than holding everything in memory.
Where it gets painful
Nested data. Every nested object needs its own expand step, and arrays expand into extra rows rather than extra columns — so one record with three tags becomes three rows, duplicating everything else. Untangling that means learning Power Query's pivot and merge operations, which is a real time investment for a one-off job.
Method 2: A browser converter
For a one-off conversion, the fastest path is a converter that does the flattening for you. Paste the JSON, get a file back.
I built a free JSON to CSV and Excel converter for exactly this. It runs entirely in your browser — nothing is uploaded, which matters when the JSON is an API response containing customer records or internal IDs. It exports either CSV or a real .xlsx workbook, and it flattens nested structures into columns instead of duplicated rows:
[
{
"id": 1,
"name": "Ayesha Rahman",
"address": { "city": "Dhaka", "zip": "1207" },
"tags": ["pro", "beta"]
}
]id,name,address.city,address.zip,tags.0,tags.1
1,Ayesha Rahman,Dhaka,1207,pro,betaOne row per record, nested keys as dotted columns, array items indexed. That is usually what you wanted from Power Query and had to fight for.
Method 3: A script
If the conversion is part of a pipeline rather than something a person does, write it into the pipeline. Python needs three lines:
import pandas as pd
df = pd.read_json("data.json")
df.to_csv("data.csv", index=False)For nested JSON, pd.json_normalize() does the same dotted-column flattening:
import json, pandas as pd
with open("data.json") as f:
data = json.load(f)
pd.json_normalize(data).to_csv("data.csv", index=False)Worth it when the job repeats and needs no human in the loop. Overkill for a file someone emailed you this morning.
The part everyone gets bitten by
Whichever method you pick, Excel will reinterpret CSV values as it reads them, and it does not warn you. Four failure modes account for almost all of it:
Leading zeros disappear
A postcode 01907 becomes 1907. Any zero-padded identifier — product codes, account numbers — loses its padding.
Things that look like dates become dates
A Japanese postcode 160-0022 or a SKU like 3-11 is silently parsed as a date and re-rendered in your locale's format. This one is especially nasty because the original value is unrecoverable.
Long numbers go scientific
A 16-digit order ID becomes 1.23457E+15, losing its final digits permanently.
Non-ASCII text turns to mojibake
Accented characters, Japanese, Bengali — all garbled if the file is not read as UTF-8.
There are two reliable ways to avoid all of this:
- 1Export to .xlsx instead of CSV. An Excel file carries type information per cell, so there is nothing to guess at and nothing to reinterpret.
- 2Or import rather than open. Instead of double-clicking the CSV, use Data → From Text/CSV, set File Origin to UTF-8, and mark the affected columns as Text before loading.
Which method should you use?
One-off conversion, nested data: use a converter. The flattening alone saves more time than the rest of the job takes.
Recurring conversion, flat data: Power Query. Set it up once, refresh forever.
Automated pipeline: a script. It belongs in the same place as the rest of your automation.
Sensitive data: Power Query, a script, or a browser tool that runs locally. Do not paste customer records into a converter that uploads to someone's server.
Try the converter
Drag & drop JSON and export it to CSV or Excel — with automatic flattening of nested objects. Runs entirely in your browser, so your data never leaves your device.
Open the JSON to CSV converter