JSON to CSV Converter
Turn JSON or JSON Lines into a clean CSV or Excel file. Nested objects become columns, arrays are handled your way, and files up to 300 MB stay on your device. Free and private.
- Free
- No sign-up
- Data stays in your browser
- Files up to 300 MB
- Nested JSON and JSON Lines
- CSV or Excel (.xlsx)
People also use
How to convert JSON to CSV for free in three steps
Paste JSON into the left box, drop a .json, .jsonl or .ndjson file on it, or press Upload JSON. The CSV appears in the right box as you type, with a preview table below the settings and a status line that tells you how many rows and columns were made. When it looks right, press Download CSV, press Excel (.xlsx) for a real spreadsheet, or press Copy.
This json to csv tool is built for real data, not only neat examples. It finds the list of records by itself, even when the list sits deep inside an API response. It turns nested objects into columns such as address.city, and it gives you four clear choices for arrays inside each record. If you were looking for json to csv online free with no sign-up and no upload, this is it: everything runs on your own device.
You can pick the separator (comma, semicolon, tab or pipe), turn the header row on or off, quote every value, and make the file Excel-friendly with a UTF-8 BOM and Windows line ends. A column list lets you drop the fields you do not need before you download.
- 1
Add your JSON
Paste it, drop a file on the left box, or press Upload JSON to open a .json, .jsonl, .ndjson or .txt file up to 300 MB. Press Sample to try a small example with nested objects and arrays.
- 2
Pick the settings
Choose how nested arrays are handled, the separator, and whether you want a header row, quotes on every value and the Excel-friendly option. Untick any columns you do not need.
- 3
Download or copy
Check the preview table and the row and column counts, then press Download CSV, Excel (.xlsx) or Copy. Large files show a Convert to CSV button first.
Your settings are remembered in this browser for next time. The JSON itself and your column choices are not saved, so download the result before you close the tab.
Getting clean JSON before you start
The cleaner the JSON you start with, the cleaner the table you get. A few minutes at the source often saves much more time in the spreadsheet.
If you copy a response from your browser's developer tools, use the Response tab rather than the Preview tab, so you get the raw text. If you save an API response from a command-line tool, save the body only, without the HTTP headers above it. Text pasted from a chat or an email sometimes has curly quotes instead of straight ones; those break any JSON reader, so copy the data from the original file when you can.
If the export tool lets you choose, ask for a flat list of records, one object per record, and the fields you actually need. Ask for IDs, phone numbers and codes as strings rather than numbers. And if the export is very large, JSON Lines is easier to handle than one giant array.
How the tool finds your records
A CSV file is a flat table: one line per record and one value per column. JSON can be shaped in many ways, so the first job is to find the list of records. The tool looks at your data in this order and takes the first match.
If the top level is an array, each item in it is one row. If the top level is an object, the tool searches inside it, up to four levels deep, for the biggest array that holds objects, and uses that. If the text is JSON Lines (one JSON object or array per line), each line becomes one row. If none of these fit, the whole object becomes a single row.
The status line under the CSV box tells you what was picked. For an API response like {"meta": {...}, "data": {"items": [...]}} it reads, for example, 2,500 rows · 14 columns · records found at “data.items”. If that is not the list you meant, copy just that part of the JSON into the box, or use the Path box on the JSON Formatter to cut it out first.
| Your JSON | What becomes the rows | Note |
|---|---|---|
| [{...}, {...}] | Each object is one row | The most common shape |
| {"results": [{...}, {...}]} | The results array is used | Status shows “results” |
| {"data": {"users": [...], "tags": [...]}} | The biggest array of objects wins | Searched up to four levels down |
| {"a":1} {"a":2} (one per line) | JSON Lines: each line is a row | .jsonl and .ndjson files |
| {"id": 7, "name": "Ben"} | One row | No list found, so the object is the record |
| [1, 2, 3] | One column named value | Plain values, one per row |
Records do not need to have the same keys. The tool collects every key it meets, in the order it first sees them, and leaves a cell empty when a record does not have that field. A null value also becomes an empty cell, while true and false are written as the words true and false.
Nested JSON to CSV online: objects become a.b columns
Most real JSON is not flat. A customer has an address, the address has a city, and an order has a shipping block with its own fields. This is where nested json to csv online tools often fail: they either drop the inner data or paste a lump of JSON text into one cell.
Here, nested objects are always flattened into their own columns. The column name is the path to the value, with a dot between each level. So {"address": {"city": "Pune", "zip": "411001"}} becomes two columns, address.city and address.zip. A deeper value such as {"order": {"ship": {"country": "IN"}}} becomes order.ship.country. There is no depth limit for objects inside a record.
Because the column names keep the full path, nothing is lost and you can always see where a value came from. It also means the CSV can be turned back into nested JSON later: the CSV to JSON page rebuilds objects from headers like address.city.
| JSON inside a record | CSV columns |
|---|---|
| {"id": 1, "name": "Asha"} | id, name |
| {"address": {"city": "Pune"}} | address.city |
| {"order": {"ship": {"country": "IN"}}} | order.ship.country |
| {"meta": {}} | meta (an empty cell) |
An empty object still gets a column, with an empty cell, so the structure of your data stays visible. If two records have different inner fields, both sets of columns appear and each record fills only its own.
Long paths make long headers. If you only need a few of them, untick the rest in the Columns list. If you want shorter names, rename the headers after you open the file, or edit the first line of the CSV box text before you copy it.
Arrays inside records: four ways to handle them
Arrays inside a record are harder, because one record can hold any number of items and a CSV row has a fixed set of columns. There is no single right answer, so the Nested arrays card gives you four. The table shows what each one does with the Sample data, where Asha has the tags ["new", "vip"] and two orders.
| Choice | Result with the Sample | Best for |
|---|---|---|
| Join values | tags = new; vip | Lists of plain values such as tags, emails or IDs. You choose the separator in the Join with box. |
| One row per item | Asha appears twice, once per order, with orders.sku and orders.qty columns | Order lines, invoice items, any one-to-many list you want to sum or filter. |
| Numbered columns | tags.0, tags.1, orders.0.sku, orders.0.qty, orders.1.sku … | Short lists with a fixed size, such as first and second phone number. |
| Keep as JSON | tags = ["new","vip"] | When another program will read the cell back as JSON, or you want nothing changed. |
Join values only joins lists of plain values: text, numbers, true, false and null. A list that holds objects, such as orders, is kept as JSON text in its cell, because joining whole objects would lose their structure. The default separator is a semicolon and a space, which is safe in a comma CSV. You can type a comma, a pipe, a slash or a line break instead.
One row per item looks for the first array of objects in each record and writes one row per item in it. The other fields of the record are repeated on every row, and the item fields become columns such as orders.sku. Any other arrays in the same record are joined or kept as JSON text, as with Join values. A record whose list is empty still gets one row. This is the choice to make when you want to sum quantities, filter by product, or build a pivot table later.
Numbered columns gives every array item its own column, with the position after a dot, counting from 0. Inner objects are flattened too, so you get orders.0.sku and orders.1.sku. The number of columns grows with the longest list in your data, so this is best for short lists.
Keep as JSON writes the array exactly as compact JSON text. Nothing is split or lost, and the cell can be read back by code later.
A worked example with the Sample data
Here is what the Sample turns into, so you can compare it with your own result. The Sample holds two customers. Asha lives in Pune, has the tags new and vip, and placed two orders. Ben lives in Leeds, has no tags, and placed one order.
With the default settings (Join values, Comma, Header row on), you get 2 rows and 6 columns. The address object is split into address.city and address.zip. The tags list is joined into new; vip. The orders list holds objects, so it stays as JSON text, and because that text contains commas and double quotes, the whole cell is wrapped in quotes and each inner quote is doubled. Ben has an empty tags list, so his tags cell is empty.
Switch Nested arrays to One row per item and the same data gives 3 rows and 7 columns: two rows for Asha, one per order, and one for Ben. The orders list is gone, and orders.sku and orders.qty take its place. The customer fields repeat on each row, which is exactly what a pivot table or a SUMIF formula needs.
| Setting and row | CSV line |
|---|---|
| Join values (header) | id,name,address.city,address.zip,tags,orders |
| Join values (Asha) | 1,Asha,Pune,411001,new; vip,"[{""sku"":""A1"",""qty"":2},{""sku"":""B7"",""qty"":1}]" |
| Join values (Ben) | 2,Ben,Leeds,LS1,,"[{""sku"":""C3"",""qty"":5}]" |
| One row per item (header) | id,name,address.city,address.zip,tags,orders.sku,orders.qty |
| One row per item (Asha, 1) | 1,Asha,Pune,411001,new; vip,A1,2 |
| One row per item (Asha, 2) | 1,Asha,Pune,411001,new; vip,B7,1 |
| One row per item (Ben) | 2,Ben,Leeds,LS1,,C3,5 |
Try Numbered columns as well and you will see tags.0, tags.1, orders.0.sku, orders.0.qty, orders.1.sku and orders.1.qty, plus a tags column that is empty for both records, because Ben's list has no items. Keep as JSON writes tags as ["new","vip"]. Four clicks give four tables, and the preview shows each one at once.
JSON array to CSV online: objects, plain values and lists of lists
The simplest case is a JSON array of objects, like [{"id":1,"name":"Asha"},{"id":2,"name":"Ben"}]. Each object is one row and each key is one column. This is what most APIs, databases and export buttons give you, and it is the shape most json array to csv online tools expect.
An array of plain values, such as ["red", "green", "blue"], becomes a single column named value with one value per row. An array of arrays, such as [[1, "Asha"], [2, "Ben"]], is a little different: with Join values each inner array is joined into one cell, and with Numbered columns each position gets its own column named 0, 1, 2 and so on. Choose Numbered columns for that shape and untick the header row if you do not want those numbers as headers.
Mixed arrays are fine too. If some items have fields that others do not, the columns are the union of all keys and the missing cells stay empty. If one item is a plain value among objects, it goes into a column named value.
Common JSON shapes and what they become
Paged API responses
Many APIs wrap the list, for example {"page": 1, "total": 240, "results": [...]}. The results array is found by itself. To combine several pages, convert each one, keep the header row only on the first, and paste the rest below it.
Wrapped exports
App exports often look like {"export": {"date": "...", "records": [...]}}. The search goes up to four levels deep, so records is found and the date is left out.
GeoJSON
A FeatureCollection has a features array. Each feature becomes a row with properties.name and other properties as columns, geometry.type as a column, and simple point coordinates joined like 77.2; 28.6. Lines and polygons are lists of lists, so they stay as JSON text.
Key-value maps
Data like {"IN": {...}, "GB": {...}} has no list, so it becomes one wide row with columns such as IN.name and GB.name. If you want one row per key, it needs to be turned into an array first, for example in the source system.
Lists of lists
Spreadsheet-style JSON like [["id","name"],[1,"Asha"]] works best with Numbered columns and Header row turned off, because the first inner list already holds the names.
Log lines
Structured logs are usually JSON Lines. Fields such as time, level, message and request.id become columns, and you can untick the noisy ones.
JSON Lines and NDJSON files
JSON Lines (also called NDJSON, newline-delimited JSON) stores one complete JSON value per line, with no square brackets around the whole file and no commas between records. Logging systems, data warehouses, streaming exports and many command-line tools use it because a program can read or write one line at a time.
You do not need to choose a mode for it. When the text is not one valid JSON document, the tool checks whether every non-empty line starts with { or [ and reads each line on its own. Each line becomes one row, and nested objects and arrays inside each line are handled with the same settings as normal JSON. Blank lines are skipped. The file types .jsonl and .ndjson can be picked in the Upload dialog, and .txt works too.
If one line in the middle is broken, the file is no longer valid JSON Lines, and the tool falls back to the tolerant reader, which usually stops with an error near that line. Fix the line, or remove it, and the rest converts normally.
The JSON to CSV format: quotes, separators and line ends
CSV looks simple, but a few rules decide whether another program reads it correctly. Here is the json to csv format this tool writes, so you know exactly what you get.
Each record is one line. Values are separated by the separator you chose. The first line holds the column names when Header row is on. A value is wrapped in double quotes when it contains the separator, a double quote, a line break, or a space at its start or end. A double quote inside a value is written twice, so She said "hi" becomes "She said ""hi""". This is the common standard (RFC 4180) that Excel, Google Sheets, LibreOffice, databases and most code libraries follow.
Numbers are written as they are in the JSON, with a dot as the decimal mark. true and false are written as words, and null becomes an empty cell. Text is written as it is, including accents, emoji and non-Latin scripts, in UTF-8.
| Separator | Character | Use it for |
|---|---|---|
| Comma | , | The default. Works almost everywhere, and in Excel in English-speaking regions. |
| Semicolon | ; | Excel in many European and Latin American regions, where the comma is the decimal mark. |
| Tab | tab | TSV files, pasting into a spreadsheet, data with lots of commas in the text. |
| Pipe | | | Some databases and old systems, and text full of commas and semicolons. |
Quote every value is off by default because most programs do not need it. Turn it on when the program that reads the file is strict, or when you want every value, even numbers, to be treated as text by an import step that respects quotes.
Line ends are the Unix kind (a single line feed) unless Excel-friendly is on, which switches to Windows line ends (carriage return and line feed). Both are read by every modern program, but some older Windows tools and some import wizards expect the Windows kind.
Numbers, text, dates and empty values
Every value ends up as text in a CSV, but how it is written still matters. Numbers keep the form the JSON parser gives them: 42 stays 42 and 3.5 stays 3.5, always with a dot. Very large whole numbers, beyond about 16 digits, cannot be stored exactly by JavaScript, so an ID like 12345678901234567891 may lose its last digits. If your IDs are that long, ask the source to send them as strings in quotes, which are kept exactly.
Text values are copied as they are. A value that holds a line break, such as an address over two lines, is wrapped in quotes so it stays in one cell; spreadsheets show it as a cell with two lines. Spaces at the start or end of a value are kept, and the value is quoted so other programs do not trim them.
true and false become the words true and false. null becomes an empty cell, the same as a missing field, so in the CSV you cannot tell the two apart. Dates are not special in JSON: they are usually strings like 2026-10-21T09:30:00Z, and they are written exactly like that. Spreadsheets may reformat them when they open the file, and the Excel section below explains how to control that.
Opening JSON to CSV in Excel: BOM, semicolons and leading zeros
Many people convert JSON because they want to look at it in a spreadsheet. Getting json to csv in Excel right takes two things: the right text encoding and the right separator. Get either wrong and you see broken characters such as é instead of é, or every value squashed into column A.
Encoding first. Excel on Windows does not always guess that a CSV is UTF-8. Without a hint, it may read the file with an older code page, and names like José, Müller or 東京 turn into strange symbols. The Excel-friendly option fixes this by putting a UTF-8 byte order mark (BOM) at the very start of the file. You cannot see it, but Excel reads it as a sign that the file is UTF-8. Leave it on for Excel. Turn it off for code, databases and tools that do not expect a BOM, where it can show up as odd characters before the first header.
Then the separator. Excel uses the list separator of your computer's region settings when you double-click a CSV. In the United States, the United Kingdom, India and many other places that is a comma. In much of Europe and Latin America, where 3,5 means three and a half, it is a semicolon. If you double-click your file and everything lands in column A, choose Semicolon as the separator and download again.
| What you see | Why | Fix |
|---|---|---|
| Everything is in column A | Your Excel expects semicolons | Choose Semicolon, download again |
| é or other odd symbols instead of accents | Excel did not read the file as UTF-8 | Turn on Excel-friendly, download again |
| Leading zeros missing (00123 shows as 123) | Excel turned text that looks like a number into a number | Use Excel (.xlsx), or import with the column set to Text |
| Long IDs show as 1.23E+15 | Excel shows big numbers in scientific form and keeps only 15 digits | Use Excel (.xlsx) or import the column as Text |
| Dates change format | Excel reads date-like text with your region's date order | Import with the column set to Text, or format the column after opening |
For full control, do not double-click. In Excel, open a blank workbook and use Data, then From Text/CSV. Pick your file, set File Origin to UTF-8 (65001) and the delimiter you used, and choose Transform Data if you want to set a column such as a zip code or phone number to Text before it loads. Google Sheets (File, Import) and LibreOffice Calc show a similar dialog when you open a CSV.
The easiest route is often the Excel (.xlsx) button. It skips the CSV questions entirely: numbers are stored as numbers, true and false as true and false, and everything else as text cells, so values like 00123 keep their leading zeros. The first row is bold and frozen, filters are switched on, and the column widths are set for you. If you need several sheets or more spreadsheet options, the JSON to Excel page is made for that.
CSV or Excel (.xlsx): which download to pick
Pick CSV when another program will read the file: a database import, a mailing tool, a script, a data pipeline or any upload form that asks for .csv. CSV is plain text, small, and understood almost everywhere, and you can open it in a text editor to check it.
Pick Excel (.xlsx) when a person will read the file. A workbook keeps leading zeros and long IDs safe, opens straight into tidy columns with no import questions, and has the header row frozen with filters ready. It ignores the separator, quoting and line-end settings because a workbook does not need them, but it follows your column choices and the nested array choice.
Both are built from the same rows, so the data inside them is the same. Download both if you are not sure.
Google Sheets, LibreOffice, Numbers and databases
Google Sheets reads UTF-8 by default, so accents are fine with or without the BOM. Use File, then Import, then Upload, and choose your file. Set the separator type to Detect automatically, or pick the one you used, and turn off Convert text to numbers, dates, and formulas if you want codes and dates kept exactly as written.
LibreOffice Calc shows a Text Import dialog when you open a CSV. Choose Unicode (UTF-8) as the character set, tick the separator you used, and click a column header in the preview to set its type to Text when it holds zip codes or long IDs. The Excel (.xlsx) file opens in Calc without any dialog.
Numbers on a Mac opens CSV files directly and reads UTF-8. If all values land in one column, download again with Comma as the separator.
Databases and scripts usually want the plainest file: Comma or Tab as the separator, Header row on, Excel-friendly off so there is no BOM, and Quote every value off unless the importer asks for it.
A JSON to CSV converter for large files: up to 300 MB
Exports from logs, analytics tools and databases can be big. As a json to csv converter for large files, this page opens files up to 300 MB and converts them on your own computer, so there is no upload time and no server limit to hit.
Small and medium inputs, up to about 3 million characters, are converted live as you type or change a setting. Above that, the page waits for you: the input box shows only the first part of the file, and a Convert to CSV button appears with a note that the file stays in your browser. Press it once you have picked your settings. While it works, the button reads Converting….
To keep the page quick, the CSV box shows the first 300,000 characters of the result, the preview table shows the first 50 rows and 30 columns, and the Columns list shows the first 300 columns. The download and the Excel file always contain every row and every column you kept.
How far you can go depends on your device's memory more than on the file size alone. A 100 MB file of simple records is usually fine on a laptop. Very deep or very wide records use more memory, and One row per item can multiply the row count. On a phone, try smaller files. If a tab runs out of memory, close other tabs, try a desktop browser, or split the file. JSON Lines files are the easiest to split, because each line is a complete record.
The Excel (.xlsx) download has a hard limit of its own: a worksheet holds at most 1,048,576 rows and 16,384 columns. For data larger than that, use CSV.
JSON to CSV in browser: why nothing is uploaded
Many converters upload your file to a server, convert it there, and send it back. This page does not. The conversion is plain code running in the page, so doing json to csv in browser means your customer lists, logs and API keys inside the data never leave your device.
You can check this yourself: open your browser's developer tools, go to the Network tab, and convert a file. You will see no upload of your data. The only things saved are your settings, kept in your browser's local storage so the page remembers them next time.
It also means speed does not depend on your internet connection. Once the page has loaded, a 20 MB file converts as fast as your computer can read it. It works in current versions of Chrome, Edge, Firefox and Safari, on Windows, macOS, Linux, ChromeOS, Android and iOS.
Choose columns, read the preview and check the counts
API data often has more fields than you need: internal IDs, timestamps, links, flags. After the JSON is read, the Columns card lists every column, with a count such as Columns (12 of 18). Untick the ones you do not want and they disappear from the CSV box, the preview table, the CSV download and the Excel file at once. All ticks every box again and None clears them, which is handy when you only want two or three fields.
Columns appear in the order they were first found in your records. To change the order, you can reorder them later in your spreadsheet. Your column choices are reset when you load a new file or the sample, so one file's choices never leak into the next.
The status line shows the result at a glance: the number of rows, the number of columns, where the records were found, and how many milliseconds the conversion took. The preview table under the settings shows the real rows, so you can spot a wrong nested array choice before you download anything.
Almost-JSON is fine: comments, quotes and commas
JSON copied from code, config files or chat messages is often not quite valid. Instead of stopping at the first slip, the tool first tries the strict JSON rules, then JSON Lines, and then a tolerant reader that accepts the most common mistakes.
If even the tolerant reader fails, a red message under the CSV box starts with This is not valid JSON, followed by the reason, the line and the column. Fix that spot, or paste the text into the JSON Formatter to see the error highlighted and try its Repair button.
| Problem | Example | What happens |
|---|---|---|
| Comments | // note, /* block */ and # note | Skipped |
| Trailing commas | [1, 2, 3,] and {"a": 1,} | Ignored |
| Single quotes | {'name': 'Asha'} | Read as normal strings |
| Keys without quotes | {name: "Asha"} | Read as normal keys |
| A missing comma | {"a": 1 "b": 2} | Read as if the comma were there |
Common jobs it helps with
API responses to a spreadsheet
Paste the response from an API call. The tool finds the list inside it, flattens it, and gives you a table you can sort and filter.
Database and app exports
Many apps and NoSQL databases export JSON or JSON Lines. Turn them into CSV for a report, a backup check or an import into another system.
Log files
Structured logs are often one JSON object per line. Load the .jsonl or .ndjson file and keep only the columns you need, such as time, level and message.
Order and invoice lines
Use One row per item to get one line per product with the order number repeated, ready for a pivot table.
Mailing and CRM imports
Most import tools want CSV with a header row. Untick extra fields, keep name and email, and download.
Analytics and charts
Spreadsheet charts and BI tools read CSV. Flatten nested metrics into columns first.
Checking data by eye
The preview table is a quick way to read a long JSON file as rows, even if you never download it.
Making a printable report
Download the CSV and use CSV to PDF, or save the Excel file and use Excel to PDF, to get a document you can share.
Tips for cleaner CSV files
Start with Sample
Press Sample and switch between the four Nested arrays choices once. It takes a minute and shows you which one fits your data.
Check the records path
If the row count looks wrong, read “records found at” in the status line. It tells you which list was used.
Use .xlsx for zip codes and IDs
Values with leading zeros or more than 15 digits are safest in the Excel download.
Keep the BOM for Excel only
Leave Excel-friendly on for Excel, and turn it off for code and databases.
Use Tab for text-heavy data
Product descriptions and addresses are full of commas. Tab-separated files need far fewer quotes.
Untick before you download
Removing columns you do not need makes the file smaller and easier to read.
Use JSON Lines for big exports
If you control the export, ask for JSON Lines. It is easier to split and quicker to read.
Format first when in doubt
If you are not sure what the data looks like, open it in the JSON Formatter tree view first.
A quick check before you share the file
Row count
Does the number of rows in the status line match what you expect? If not, check where the records were found.
Column names
Are the headers the ones the next program expects? Untick extra columns, and rename headers later if needed.
Arrays
Is any column full of JSON text? That is usually a list of objects that you may want as rows or numbered columns.
Separator
Does the receiver expect commas, semicolons or tabs? Match it before you download.
Encoding
Is the file for Excel (keep Excel-friendly on) or for code (turn it off)?
Sensitive fields
Remove columns such as emails, tokens or personal numbers that the receiver does not need.
Troubleshooting: when the result is not what you expected
Only one row came out
The data is probably a single object, or the list you want holds plain values rather than objects. Copy just the list into the box.
The wrong list was used
When an object holds several arrays, the biggest array of objects is used. Paste only the array you want, starting with [ and ending with ].
A column is full of JSON text
That column is an array of objects. Choose One row per item or Numbered columns to split it.
Too many columns
Numbered columns makes one column per array position. Switch to Join values or One row per item, or untick columns.
Rows repeat
One row per item repeats the record fields on each item row. That is expected; choose Join values if you want one row per record.
Everything is in one Excel column
Your Excel uses a different list separator. Choose Semicolon and download again, or import with Data, From Text/CSV.
Strange characters in Excel
Turn on Excel-friendly so the file starts with a UTF-8 BOM, then download again.
Odd characters before the first header in code
That is the BOM. Turn off Excel-friendly for files meant for scripts and databases.
This is not valid JSON
Read the line and column in the message. Look for a missing bracket, a missing quote or text pasted before or after the JSON.
The tab slows down or closes
The file is too big for the memory available. Close other tabs, use a desktop browser, or split the file into parts.
JSON and CSV: what changes, and how to go back
JSON and CSV are good at different things. JSON can hold any shape: objects inside objects, lists of any length, and types such as numbers, true, false and null. CSV holds one flat table of text. Turning one into the other always involves choices, and the settings on this page are those choices made visible.
If you need to go back the other way, the CSV to JSON page reads a CSV, rebuilds nested objects from headers like address.city, and gives you an array of objects, JSON Lines or other shapes. A round trip with Numbered columns or Keep as JSON keeps the most structure.
This page or a script: which to use
If you convert the same kind of file every day, a small script in your own language may be the better long-term choice, because it runs on a schedule without anyone clicking. Most languages have a CSV library that handles the quoting rules, and flattening nested objects takes only a few lines.
This page is quicker when the job is one-off, when the data shape changes from file to file, or when you want to see the table before you commit to a layout. The preview lets you try the four array choices in seconds, and the result can serve as the target that a script should later match.
Either way, the same questions come up: which list holds the records, how nested arrays should look, which separator the receiver expects, and whether the file needs a BOM. The settings here are a good checklist for writing that script too.
JSON to CSV online free: everything included
There is no paid version and nothing is locked. Every setting on this page, the Excel download and the 300 MB file size are open to everyone. You do not need an account or an email address, and there is no limit on how many files you convert in a day.
That makes it easy to convert json to csv for free whether you do it once or every morning as part of a report. Because nothing is uploaded, there is also no queue and no waiting for a server.
Keeping JSON to CSV free and private
Keeping the tool free does not mean selling your data. Your JSON is never sent anywhere, so there is nothing to collect. This makes json to csv free and safe to use even for work files that you are not allowed to upload to an outside service, though you should always follow your own company's rules.
What to do next
Need a spreadsheet with more options? Use JSON to Excel. Want to tidy or check the JSON first? Use the JSON Formatter. Going the other way? Use CSV to JSON. Need a document to share? Turn the CSV into a PDF with CSV to PDF, or the workbook with Excel to PDF.
Frequently asked questions
How do I convert json to csv for free?
Paste your JSON or upload the file, check the preview, and press Download CSV. Every feature is free, there is no account, and there is no daily limit.
Is this json to csv online free with no limits?
Yes. All settings, the Excel download and files up to 300 MB are available to everyone at no cost. The only real limit is the memory of your own device.
Is this json to csv free for business use?
Yes, you can use it for work files at no cost. Because the data never leaves your browser, it also fits many company privacy rules, but check your own policies.
How does nested json to csv online conversion work here?
Nested objects become columns named by their path, such as address.city or order.ship.country. Arrays inside records follow the Nested arrays setting: Join values, One row per item, Numbered columns or Keep as JSON.
Can I use it as a json array to csv online tool?
Yes. A JSON array of objects is the most common input: each object becomes a row and each key a column. Arrays of plain values become one column named value.
Is it a good json to csv converter for large files?
It opens files up to 300 MB and converts them on your device. Inputs over about 3 million characters show a Convert to CSV button instead of converting as you type, and the download always holds every row.
How do I open json to csv in Excel without broken characters?
Leave Excel-friendly on, which adds a UTF-8 BOM so Excel reads accents correctly. If all values land in column A, your Excel uses semicolons, so choose Semicolon and download again, or use the Excel (.xlsx) button.
Is json to csv in browser really private?
Yes. The conversion is code running in the page, and your data is not uploaded. Only your settings are saved, in your browser's local storage.
What json to csv format does the tool write?
Standard CSV: one record per line, your chosen separator, an optional header row, and double quotes around values that contain the separator, a quote, a line break or edge spaces. Quotes inside values are doubled.
Does it support JSON Lines and NDJSON?
Yes. Upload a .jsonl or .ndjson file, or paste text with one JSON object per line. Each line becomes one row.
What happens with arrays of objects inside a record?
With Join values they stay as JSON text in one cell. Choose One row per item to get one row per item with the other fields repeated, or Numbered columns to get columns like orders.0.sku.
Can I change the separator to semicolon or tab?
Yes. The Separator setting offers Comma, Semicolon, Tab and Pipe. The CSV updates straight away.
Can I choose which columns to export?
Yes. After the JSON is read, the Columns card lists every column with a tick box, plus All and None. Unticked columns are left out of the CSV, the Excel file and the preview.
Why do my zip codes lose their leading zeros?
The CSV keeps them, but Excel turns number-like text into numbers when it opens a CSV. Download Excel (.xlsx) instead, where such values are stored as text, or import the column as Text.
My JSON has comments and trailing commas. Will it work?
Yes. The tolerant reader skips comments and ignores trailing commas, and it also accepts single quotes and keys without quotes. If it still fails, the message shows the line and column.
Can I turn off the header row?
Yes. Untick Header row and the column names are left out. This is useful when you add rows to a file that already has headers.
What does Quote every value do?
It puts double quotes around every value, even numbers. Leave it off unless the program reading the file asks for it.
Should I turn off Excel-friendly?
Turn it off when the file goes to code, a database or a tool that does not expect a byte order mark. Leave it on when the file is for Excel.
Does it work on a phone?
Yes, in current mobile browsers on Android and iOS. Very large files are better on a computer because phones have less memory.
Is my data saved anywhere?
No. The JSON and the result stay in the open tab and are gone when you close it. Only your settings are remembered in this browser.
Can I convert the CSV back to JSON?
Yes. Use the CSV to JSON tool on this site. It rebuilds nested objects from headers like address.city and lets you choose the JSON shape.
Convert your JSON now
Paste, upload or try the sample, and see the CSV and the preview straight away. Free and private.
Start convertingLast updated October 2026 · Written and maintained by the FlipMyFormat team