Toolkite

JSON to Excel Converter Online: What Actually Works in 2026

Sep 14, 2026 · AI-assisted

You've got a JSON file that a developer handed you, or an API response you saved to disk, and someone upstairs wants it as a spreadsheet by Friday. The obvious move is to paste it into some random "convert" site and hope for the best. The less obvious move is to think for ten seconds about what you're actually pasting — because API responses are full of tokens, customer IDs, and internal field names you probably shouldn't be handing to a stranger's server.

This is a walkthrough of how to get from JSON to a real Excel file (.xlsx) without uploading anything, what breaks when your JSON is nested, and when you should skip the browser entirely and write a script.

What "JSON to Excel" actually means

People say "Excel" loosely. There are three different outputs hiding behind that word, and picking the wrong one is why your columns look like garbage:

  • CSV — plain text, comma-separated. Opens in Excel fine. No formatting, no multiple sheets, no data types.
  • XLSX — the real Excel format. Preserves types better, handles larger row counts, and won't mangle long numbers the way CSV sometimes does.
  • A flattened table — this is the one that matters. If your JSON has objects inside objects, neither CSV nor XLSX will magically know what to do with them. You have to flatten first.

If your JSON looks like this, you're in the easy case:

[
  { "id": 1, "name": "Ada", "plan": "pro" },
  { "id": 2, "name": "Grace", "plan": "free" }
]

An array of flat objects converts cleanly to columns id, name, plan. Done.

If it looks like this, you have decisions to make:

[
  {
    "id": 1,
    "customer": { "name": "Ada", "address": { "city": "London" } },
    "tags": ["vip", "renewal"]
  }
]

Now you need to decide whether customer.address.city becomes its own column, and what happens to the tags array. That's the flattening problem, and it's where most online converters quietly fall over.

Use our online tool: JSON ↔ CSV Converter

The JSON ↔ CSV Converter runs entirely in your browser — PapaParse and SheetJS doing the work locally, no file ever leaving your machine. That matters if the JSON contains anything you wouldn't post publicly.

Here's the actual flow:

  1. Paste or upload. Drop a .json or .csv file, or paste the text directly. Free tier handles files up to about 25MB.
  2. Pick your direction. JSON→CSV, CSV→JSON, or JSON→Excel (.xlsx).
  3. Convert and download. Copy the result or download it immediately.

For nested JSON, the free tier flattens up to 10 levels deep, which covers the vast majority of API payloads I've seen. If you're dealing with something genuinely gnarly — deeply nested config dumps, multi-level event logs — the Pro tier goes deeper, raises the file ceiling to 50MB with a progress bar, and adds batch conversion up to 10 files at once. Pro is a one-time $9.99, not a subscription.

There's also a custom delimiter option and an API URL fetch if you'd rather point the tool at an endpoint than save the response first. That fetch is the one operation that touches the network, and it goes through a CORS proxy — worth knowing if the endpoint is internal.

When flattening goes wrong (and how to spot it)

Flattening is not lossless, and pretending otherwise causes real bugs. Three things to watch:

Arrays inside objects. A field like tags: ["vip", "renewal"] has to become something. Usually it gets joined into a single cell like vip, renewal. That's fine for reading, terrible for filtering later — Excel will treat the whole thing as one string.

Repeated keys across records. If record A has customer.address.city and record B doesn't, you'll get an empty cell. That's correct behavior, but it means your column list is the union of every key across every record. A single weird record can add twenty useless columns.

Type drift. Numbers stored as strings in JSON stay strings. Excel will happily left-align them and refuse to sum them until you convert. Check a numeric column after import — if the values are left-aligned, they're text.

A quick sanity check: count your source records, count your output rows, and confirm they match. If they don't, something got collapsed.

The alternative: a script you control

If you're converting the same shape of JSON every week, stop doing it by hand. A short Python script is more honest about what's happening:

import pandas as pd

df = pd.json_normalize(pd.read_json("input.json"))
df.to_excel("output.xlsx", index=False)

json_normalize handles the flattening, and you can control the separator (sep="_" instead of the default .) so your column names don't look like file paths.

The trade-offs are real, though. You need Python and pandas installed, you need to remember the command, and you need to actually be at a machine where that's set up. For a one-off conversion on a laptop you don't control, that's a lot of ceremony. The browser tool wins on convenience; the script wins on repeatability and on shapes that need custom logic.

If your data is sensitive and you don't want to install anything, browser-side conversion is the safer middle ground — nothing leaves the device, and you can verify that by watching your network tab. Same reasoning applies to other file-handling chores; it's why tools like the EXIF Remover exist for photos, and the same principle shows up in our privacy notes.

Practical tips before you hit convert

A few things that save time:

  • Validate the JSON first. A trailing comma or a stray comment will break the parse. Paste it into any JSON validator before converting.
  • Decide your column names early. customer.address.city is readable; customer_address_city is easier to work with in formulas. Pick one convention and stick to it.
  • Watch the row limit. Excel tops out around 1,048,576 rows. If you're near that, you probably want a database, not a spreadsheet.
  • Keep the original. Always retain the source JSON. Flattening is one-way, and you'll want to re-derive a different view later.
  • Check encoding on export. If your data has accented characters or emoji, open the output once and confirm nothing turned into ?.

If you're generating test data to convert in the first place, the mock data generator can produce JSON you can feed straight into the converter — useful for building a template before the real payload arrives.

The short version

For an array of flat objects, any converter works. For nested JSON, you need something that flattens predictably and tells you what it did. For anything with customer data in it, you want that conversion happening on your machine, not someone else's. The JSON ↔ CSV Converter covers the first two and is honest about the third — which is more than most of the sites ranking for this keyword can say.

FAQ

Does converting JSON to Excel in the browser actually produce a real .xlsx file?

Yes. The tool uses SheetJS locally in your browser to build a genuine .xlsx workbook, not a renamed CSV. You get a file Excel opens natively, with the data types it can infer from your JSON preserved as well as the format allows.

What happens to nested objects when I convert JSON to Excel?

They get flattened into columns, typically using a separator like a dot or underscore, so customer.address.city becomes its own column. The free tier handles nesting up to 10 levels deep, which covers most API responses. Arrays inside objects usually get joined into a single cell, so check those columns if you plan to filter on them.

Is there a file size limit for JSON to Excel conversion?

On the free tier, files up to roughly 25MB work fine. If you regularly deal with larger payloads, the Pro option raises that to 50MB and shows a progress indicator during conversion. Pro is a one-time $9.99 purchase rather than a recurring subscription.

Can I convert JSON from an API URL directly instead of saving it first?

Yes, that's one of the Pro features — you can point the tool at an API URL and fetch the response for conversion. Be aware this is the one operation that uses the network, routed through a CORS proxy, so avoid it for internal or authenticated endpoints you wouldn't want proxied.

Why do my numbers show up as text after converting to Excel?

Because JSON stores them as strings, and the converter preserves that. Excel left-aligns text and won't sum it. Select the column, use Text to Columns or multiply by 1 in a helper column, or fix the source JSON to emit real numbers before converting.

Should I use a browser converter or a Python script for this?

Use the browser tool for one-off conversions, files you don't want to upload, or machines where you can't install anything. Use a script when the same JSON shape arrives on a schedule, when you need custom flattening logic, or when the conversion is part of a larger pipeline.