Your data never leaves your device — 100% local processing

JSON → CSV converter

Flatten an array of JSON objects into a table you can open in Excel.

0 B uploaded — this page has not sent your files anywhere?

Private by design — every conversion runs right inside your browser, so your data is never uploaded anywhere. Safe for customer lists, sales figures and personal data. It even works offline.

Other conversion sites upload your spreadsheet to a server, process it there, and say they delete it after a while. Until that happens, your rows sit on someone else’s server. Here there is no upload step at all. The more sensitive the data — customer lists, payroll, anything with personal identifiers — the more that difference matters. See how to verify it →

More table converters

All-in-one converterCSV → ExcelExcel → CSVJSON → CSVCSV → JSONRepair broken CSVMarkdown table maker

What happens to nested values and long numbers when JSON becomes CSV?

Open a developer’s JSON export or an API response in a text editor and all you get is braces, with no way to sort or total anything. This tool gathers the keys of an array of objects into column headers, lays each object out as one row and saves a CSV that opens straight in Excel. It flattens exactly one level deep, so it helps to know where nested values end up.

A closer look

Columns are built from every object’s keys in the order they first appear. A key that only shows up in a later object is added as a new column on the right, and objects without it leave that cell empty. When a value is itself an object or array, it is not split into columns; it goes into one cell as JSON text such as {"city":"Austin"}, with its inner double quotes doubled as CSV requires. An array of arrays becomes a table whose first array is the header, and an array of plain numbers or strings becomes a single column called value. A wrapper with exactly one key holding an array, like {"data":[...]}, is unwrapped automatically.

Strings are copied as written, so "00123" stays 00123; true and false become TRUE and FALSE, and null becomes an empty cell. Numbers are written out in full, never in scientific notation, so a millisecond timestamp such as 1719812345678 comes out as is rather than as 1.71981E+12. Whole numbers of 16 digits or more, such as long order numbers or IDs, are carried over as text before their last digits can be rounded, so they come out exactly as written in the JSON. The downloaded CSV carries a UTF-8 BOM so Excel reads accents correctly.

How to use it

When it helps

Reviewing API responsesSpread a response array you got while developing into a table and spot missing fields or odd values by eye.
Tidying a MongoDB exportConvert the array that mongoexport produces with --jsonArray into CSV and summarize it with an Excel pivot table.
Handing data to Excel usersTurn a developer’s JSON extract into CSV for colleagues in operations or sales.
Straight from DevToolsCopy a response from the Network tab of your browser’s developer tools and paste it into the paste tab without saving a file first.

Common snags

I get “JSON must be an array”.The same message appears for any JSON syntax error. Trailing commas, comments and single quotes are not standard JSON and will not parse. JSON Lines files, with one object per line, are not supported either; wrap everything in [ ] and add a comma at the end of each line.
The table is a single row with data and meta columns.An object with more than one key, such as {"data":[...],"meta":{...}}, is not treated as a wrapper; it is read as one object, which means one row. Copy just the inner array and paste that.
In Excel, long IDs show up as 1.71981E+12.The CSV holds every digit, but Excel shows long numbers in scientific notation when it opens a CSV, and past 15 digits it turns the last digits into zeros. Use Excel’s Data → From Text/CSV import and set that column to Text, or run the file through Repair broken CSV with “Keep numbers with leading zeros as text” turned on, which also keeps numbers of 12 or more digits as text.
The CSV says 00123, but Excel shows 123.Excel converted it to a number while opening the CSV. Use Excel’s Data → From Text/CSV import and set that column to Text, or run the file through Repair broken CSV with “Keep numbers with leading zeros as text” turned on.

Tip Column order follows the key order of the first object, so if you want the columns in a particular order, arranging the keys of that first object is all it takes.

Frequently asked questions

Which JSON shapes are supported?

An array of objects [{...},{...}] is the primary shape. An array of arrays becomes the table as-is, and a wrapper object like {"data":[...]} is unwrapped automatically. Nested objects/arrays are stored as JSON strings in their cells.

What if objects have different keys?

Columns are built from the union of all keys; missing values are left blank.

My CSV shows garbled characters

sheetmoa reads your file as UTF-8 first. If it finds broken characters (�), it retries only with the Korean legacy encoding EUC-KR (CP949), which Korean Excel uses by default; old .xls files are also read with code page 949. No other legacy encoding is tried. Files saved as UTF-8 (Excel's "CSV UTF-8 (Comma delimited)") open correctly, but a CSV saved in Windows-1252 (what Excel's plain "CSV (Comma delimited)" produces on Western-language Windows) can show broken accents such as "A�o". If that happens, re-save the file in Excel as "CSV UTF-8 (Comma delimited)" and open it again.

Is my data uploaded to a server?

No. Every conversion runs inside your browser and your file is never sent over the network. Safe even for customer lists and confidential spreadsheets.

Is it free?

Completely free — no limits on file count or size, and no sign-up.