TinyFileLab

Home›Developer›JSON to CSV

Parsed in the page — your data never leaves it

Convert JSON to CSV

An API gives you nested JSON. A spreadsheet wants a flat grid. This does the flattening, quotes the fields properly, and never sends your data anywhere.

JSON in paste it, or drop a .json file

Paste some JSON, or drop a .json file onto the box.

CSV out
Nothing is transmittedThe page does the work locally. No request carries your data anywhere.
No length limitPaste as much as you like — the only ceiling is your own memory.
No account, no ads in the wayOpen the page, use it, close it. Nothing to sign up for.

The problem is nesting, not syntax

JSON is a tree and CSV is a grid, so every conversion has to answer one question: what happens to a value that lives three levels down? This page flattens it into a column name that records the path. An object becomes dotted — role.team, role.level — and an array becomes indexed — tags[0], tags[1]. Nothing is silently discarded, and the header row tells you exactly where each column came from.

The column set is the union of every key found across all records, in the order they were first seen. That matters with real API output, where the third record has a field the first two did not: the column exists, and the earlier rows get an empty cell rather than the file falling apart.

What counts as a row

If the top level is an array, each element is a row — the ordinary case. If it is an object wrapping exactly one array, that array is unwrapped, because {"data": [...]} and {"results": [...]} are what most APIs actually return and nobody wants a single-row CSV with a thousand indexed columns. Any other object is treated as one row with its keys as columns.

Quoting, and why it is not optional

A field containing a comma, a double quote or a line break has to be wrapped in quotes, with internal quotes doubled, or the file is broken. That is the RFC 4180 rule and it is where most hand-rolled exports go wrong — usually on a free-text field with a comma in it, discovered a week later when someone's spreadsheet has a column of nonsense. Escaping is applied automatically; the quote every field option forces it on for tools that prefer uniformity.

Line endings are CRLF, which is what the specification says and what Excel expects. Separator can be switched to semicolon, tab or pipe — semicolon matters if the file is going to someone whose regional settings use a comma as the decimal mark, which is most of continental Europe.

The BOM option, and why it is on

Excel on Windows does not detect UTF-8 in a .csv file. Open one containing accented or non-Latin characters and you get mojibake — Malmö arriving as Malmö. A three-byte marker at the start of the file tells Excel what it is looking at, and the problem disappears. Leave the option on unless the file is heading into a parser that would choke on those bytes, which some older command-line tools do.

Where the data goes

Nowhere. The JSON is parsed and the CSV is built in this page, which is the point: API responses and exports routinely contain customer records, internal identifiers and credentials, and pasting those into a website that processes them server-side is a disclosure you cannot take back. There is no request to make and no upload limit to hit — a multi-megabyte paste is fine, bounded only by your own machine. If you want the reverse trip, most spreadsheets export CSV directly, and for encoding assets rather than data the Base64 tool works the same way.

Common questions

How are nested objects handled?

They are flattened into dotted column names. A field at role.team becomes a column called role.team, and array items get an index, like tags[0]. The path is preserved so you can see where every column originated.

What if my records do not all have the same fields?

The columns are the union of every key seen across all records. Records missing a field get an empty cell for that column, so nothing shifts out of alignment.

Does it handle commas and quotes inside values?

Yes. Any field containing the separator, a double quote, or a line break is wrapped in quotes with internal quotes doubled, per RFC 4180. That is the single most common way hand-written CSV exports break.

Why is my Excel file showing strange characters?

Excel on Windows assumes a legacy encoding unless the file starts with a UTF-8 byte order mark. The Excel-safe option adds it, which fixes accented and non-Latin text. It is on by default.

Is there a file size limit?

None imposed by the page. Everything runs in your browser, so the practical ceiling is your available memory — several megabytes of JSON is unremarkable.

Is my JSON uploaded anywhere?

No. It is parsed in the page and never transmitted. This matters more here than for most tools, since API output frequently contains personal data or internal identifiers.

Can I use a semicolon or tab instead of a comma?

Yes, both are in the separator list along with pipe. Semicolon is the right choice for European regional settings, where the comma is the decimal separator.