JSON to Excel Converter

Convert JSON data to a .xlsx file instantly in your browser. Your data never leaves your device.

or paste JSON below
🔒

100% private

Your files are processed locally and never uploaded to our servers.

The JSON to Excel converter on this page turns a .json, .jsonl or .ndjson file, or JSON you paste in, into an .xlsx workbook with one row per record, and it does the work in your browser. The usual reason to be here is an API response. You ran a request against the Stripe API, got back {"object": "list", "data": [...], "has_more": true}, and someone in finance wants it as a spreadsheet by lunch.

Excel's own route to that response is Power Query, which often makes you click past the wrapper before you reach the records.

How to convert JSON to Excel

  1. Drop a .json, .jsonl or .ndjson file onto the upload box above, or paste JSON into the text box below it. Files can be up to 50MB.
  2. Click Convert to Excel.
  3. Find the download. orders.json arrives as orders (xlsx.com).xlsx, and pasted JSON comes down as export (xlsx.com).xlsx.
  4. Read the result box. It gives the row and column counts and, if your records were inside a wrapper object, the key it took them from, such as data or response.items.

A column count far higher than you expected usually means an array of objects got spread sideways. The section on nested arrays below explains why.

What the converter does to your data

Every record becomes a row and every key becomes a column, under a bold header row.

In the JSONIn the .xlsx
An array of objectsOne row per object
Records with different keysA column for every key found, in the order first seen; blank where a record lacks the key
{"customer": {"city": "Leeds"}}A customer.city column
"tags": ["vip", "eu"]One cell reading vip, eu
"lines": [{"sku": "A1"}, {"sku": "B2"}]Columns lines.0.sku and lines.1.sku
{"data": [...], "page": 2, "total": 40}One row per item in data; page and total are left out
One object with no array of recordsA single row
[3, 5, 8]One column named value
42.5The number 42.5
true, falseExcel TRUE and FALSE
nullAn empty cell
"00731"Text, leading zeros kept
"2026-03-04"Text, not a date

The different-keys row matters more than it looks. Real API data has optional fields, and a converter that builds its columns from the first record silently drops a discount_code that only appears on record 212. This one collects every key across every record.

Column widths are set to fit the content, between 10 and 60 characters, and everything goes on one sheet named Sheet1.

Why an API response turns into one giant row

Most APIs don't return a bare array. They return an envelope: the records sit under a key like data or items, next to paging fields such as page, total and a next link. Flatten that envelope as if it were one record and 40 customers become a single row with columns data.0.id, data.0.email, data.1.id, all the way out to data.39.email.

Power Query has its own version of the problem. An envelope often loads as a record rather than a table, and you click into the list, convert it to a table and expand its columns before you see a row of data.

This converter looks for the array of records, up to three levels deep, so it finds response.items as well as a top-level data. It makes one row per record and the result box names the key it used. The paging fields are left out of the sheet; if you need the total or the next-page cursor, it's still in the original JSON.

Should nested arrays become columns or rows?

An order with three line items has to go somewhere, and there are two defensible answers that produce different sheets.

This converter spreads them sideways: lines.0.sku, lines.0.qty, lines.1.sku and so on, keeping one row per order. An order-level column like shipping still sums correctly, because each order appears once. The cost is width. If one order in the file has 50 lines, every row gets columns out to lines.49.sku, empty for most orders.

Power Query's Expand to New Rows goes the other way. You get one row per line item, with the order's fields repeated on each. That suits a pivot table by SKU. It's also how a three-line order's shipping charge gets counted three times when someone sums the column.

Arrays of plain values, like a list of tags, avoid the choice entirely. They're joined into one cell.

If the flattening would pass Excel's 16,384 columns, or the records would pass 1,048,576 rows including the header, the converter stops and says how far over the limit you are rather than writing a file Excel can't open.

Dates and IDs that don't come through as you expect

JSON has no date type. Every date in an API response is a string, usually ISO 8601: 2026-03-04, or 2026-03-04T09:15:00Z with a time. The converter keeps strings as text, so these arrive as text. They sort correctly, but date filters and date arithmetic won't work on them.

Put this in a spare column and format the column as a date and time:

=DATEVALUE(LEFT(A2,10))+TIMEVALUE(MID(A2,12,8))
// LEFT(A2,10)   the date part: 2026-03-04
// MID(A2,12,8)  the time part: 09:15:00

For date-only values, drop the +TIMEVALUE(...) part, or it returns #VALUE!. A trailing Z means the time is UTC, and Excel stores no time zone, so shift it yourself if you report in local time: subtract 5/24 for New York in winter. The pieces are covered in DATEVALUE, LEFT, MID and TIMEVALUE.

IDs go the other way. A ZIP code or account number sent in quotes, like "00731", stays text with its leading zeros. A number sent without quotes becomes an Excel number, which is right for amounts and wrong for long identifiers. Excel keeps 15 significant digits of any number, so an 18-digit ID written without quotes can't survive as a number in Excel.

Doing it in Excel without a converter

Excel 365 on Windows imports JSON itself. Go to Data > Get Data > From File > From JSON, pick the file, and the Power Query Editor opens. Nested fields still arrive as Record or List columns. Click the two-arrow icon in each column header to expand them; for lists, choose Expand to New Rows or Extract Values. Then Home > Close & Load puts a table on a new sheet. Each level of nesting is another round of expanding.

For a live API, Data > From Web takes the URL and opens the same editor, and Data > Refresh All re-runs the whole query later. That beats any converter for a report you rebuild every Monday.

One trap: the From JSON connector fails on JSON Lines. Microsoft's own documentation lists a JSON Lines file as a cause of its "unable to connect" error and offers M code as the workaround. This converter reads .jsonl and .ndjson files as one record per line.

Use Power Query when you need a refreshable query, one row per nested item, or a file over 50MB.

Limits

  • One sheet. Everything lands on Sheet1. Nested arrays become columns, not separate linked sheets; for line items on their own rows, use Expand to New Rows in Power Query.
  • Wide sheets from long nested arrays. An order with 50 lines adds columns out to lines.49.sku for every row.
  • The longest record array wins. If a response holds several arrays of records, say 20 users and a longer list of 35 audit events, the converter uses the longer one. Paste only the array you want.
  • Dates stay text. Use the DATEVALUE formula above.
  • Quoted numbers stay text. Amounts sent as "129.00" need VALUE: =VALUE(A2).
  • Text over 32,767 characters is cut. That's Excel's cell limit. The result box says how many values were cut.
  • No line number on invalid JSON. The error message says the JSON is invalid without saying where. The usual causes are a trailing comma after the last item, single quotes instead of double, unquoted keys, and comments, none of which JSON allows.
  • No URL fetching. Save the response or paste it. A paged API means one conversion per page.
  • 50MB per file.

Going the other way, Excel to JSON turns a worksheet back into JSON. If the export arrived as XML instead, XML to Excel handles that format.

Questions

Can Excel open a JSON file?

Yes, Excel 365 imports JSON through Power Query: Data > Get Data > From File > From JSON. Nested fields arrive as Record or List columns that you expand one level at a time in the Power Query Editor. JSON Lines files fail in that connector unless you write M code.

How do I convert nested JSON to Excel?

Flatten it into columns. This converter turns nested objects into dot-notation columns like customer.city and spreads arrays of objects into indexed columns like lines.0.sku, keeping one row per record. If you want one row per nested item instead, use Power Query's Expand to New Rows.

Is this JSON to Excel converter free?

Yes. There is no daily limit and no sign-up. Files can be up to 50MB.

Is my JSON uploaded to a server?

No. The conversion runs in your browser, and the JSON never leaves your computer. That matters for API responses full of customer names and email addresses.

Can I convert JSON straight from an API URL?

Not with this converter; it doesn't fetch URLs. Save the response to a file or paste it into the text box. For a pull you repeat every week, Excel's Data > From Web takes the URL and refreshes on demand.

Why did my JSON turn into one very wide row?

Because the records sit inside a wrapper object such as data or items, and a converter that doesn't look inside treats the whole response as one record. This converter finds the array of records up to three levels deep, makes one row per record and names the key it used in the result. If your records sit deeper than that, paste only the array.

Why are dates from my JSON not real dates in Excel?

JSON has no date type, so dates come through as strings like 2026-03-04 and stay text. Put =DATEVALUE(LEFT(A2,10)) in a spare column and format it as a date. For timestamps, add +TIMEVALUE(MID(A2,12,8)) to keep the time.