CSV to JSON Converter
Turn CSV, TSV or Excel data into JSON in your browser. Get an array of objects, an array of arrays, a keyed object, columns or JSON Lines, with real numbers and booleans and nested keys from a.b headers. Free and private.
- Free
- No sign-up
- Data stays in your browser
- Files up to 300 MB
- Excel .xlsx too
- Five JSON shapes
- JSON Lines
People also use
CSV to JSON online free: convert in three steps
Paste CSV into the left box, drop a .csv, .tsv, .txt or Excel .xlsx file on it, or press Upload CSV / Excel. The JSON appears in the right box a moment later and updates as you type or change a setting. Under the output, a short status line tells you how many records were made, how many fields each one has, which separator was used and how long it took.
This page is a csv to json online free tool that runs in any modern browser on a computer, tablet or phone. The file is read and converted by code inside the page, on your own device, so your data is never uploaded. There is no account and no daily limit, and files up to 300 MB can be opened.
The settings sit in three cards below the boxes. Reading the CSV covers the separator, the header row and trimming spaces. JSON output picks one of five shapes and the indent. Values decides whether numbers, true, false and null become real JSON types, whether a.b headers build nested objects, and what happens to empty cells. A preview table under the cards shows the first rows so you can check that the columns lined up.
- 1
Add your data
Paste CSV or TSV text, drop a .csv, .tsv, .txt or .xlsx file on the box, or press Upload CSV / Excel. Press Sample to try a small example first.
- 2
Choose the settings
Check the separator and First row has the names, pick a JSON shape such as Array of objects or JSON Lines, choose 2 spaces, 4 spaces or Minified, and set how values and empty cells are written.
- 3
Copy or download
Read the status line and the preview table, then press Copy, or press Download JSON (Download JSONL for JSON Lines) to save the file.
Your settings are remembered in this browser for next time, but the data itself is not saved. Copy or download the JSON before you close the tab.
A worked example: what the Sample turns into
Press Sample and the input box fills with a header and three rows: id, name, address.city, address.zip, active and joined. With the default settings, comma separator, First row has the names, Array of objects, 2 spaces, real JSON types, nested objects and null for empty cells, the status line reads 3 records and 6 fields, and each record shows a different detail of how the conversion works.
The first record has the id 1, the name Asha, an address object holding the city Pune and the zip 411001, active set to true and a joined date of 2026-01-04. Notice that address is one object with two keys inside, built from the two dotted headers, and that active is the boolean true rather than the text "true". The joined date stays text, because JSON has no date type.
The second record, Ben, has an empty joined cell, so joined is null. His zip, LS1, contains letters, so it stays text. The third record has the name Chen, Li: the comma inside the quotes stays part of the name instead of starting a new column. Its zip, 00100, starts with a zero, so it stays text as well and keeps both zeros.
This small sample also shows a point worth knowing about real data. The zip column now holds a number in the first record and text in the other two, because 411001 looks like a plain number. Most programs cope with that, but some strict systems expect one type per field. If that matters for a column like this, untick Numbers, true/false and null as JSON types so every value stays text, or fix the type in your code after loading.
Try the other settings on the sample to see them at work. Pick Leave out and Ben's record loses the joined key. Untick Nested objects from a.b headers and address.city becomes a flat key with a dot in it. Choose Object by first column and the ids 1, 2 and 3 become the keys of one object.
CSV to JSON format: five output shapes with examples
JSON can hold the same table in several ways, and the right one depends on where the data goes next. The JSON shape setting offers five, and you can switch between them at any time: the output changes straight away. The table below uses one tiny input for every shape, so you can compare them side by side.
The input is three lines: the header id,name, then 1,Asha and 2,Ben. First row has the names is ticked, Numbers, true/false and null as JSON types is ticked, and the indent is set to Minified so each result fits on one line. This is what a csv to json format choice really means: the data stays the same, only its structure changes.
| Shape | Result for id,name / 1,Asha / 2,Ben | Good for |
|---|---|---|
| Array of objects | [{"id":1,"name":"Asha"},{"id":2,"name":"Ben"}] | One object per row, keys from the header. The default, and what most APIs and apps expect. |
| Array of arrays | [["id","name"],[1,"Asha"],[2,"Ben"]] | One array per row, header row first. Small, and keeps the column order exactly. |
| Object by first column | {"1":{"name":"Asha"},"2":{"name":"Ben"}} | The first column becomes the key of each record, for quick lookups by ID. |
| Object of columns | {"id":[1,2],"name":["Asha","Ben"]} | One array per column, which suits charts and column-based analysis. |
| JSON Lines | {"id":1,"name":"Asha"} and {"id":2,"name":"Ben"} on separate lines | One object per line, with no outer brackets. Good for logs, streams and bulk imports. |
If you are not sure which one to choose, start with Array of objects. It is the easiest to read, every record carries its own field names, and almost every program that reads JSON can work with it. Change shape only when the place you are sending the data asks for something else.
CSV to JSON array: array of objects or array of arrays
A csv to json array comes in two forms, and both are one click away. Array of objects turns every data row into an object whose keys come from the header row. A people.csv with the columns id, name and city gives a list of objects, each holding an id, a name and a city. This is the shape that front-end code, REST APIs, test fixtures and most databases import without any extra work.
Array of arrays keeps each row as a plain list of values in column order. When First row has the names is ticked, the header row is included as the first array, so the result still tells you what each position means. When it is not ticked, every array is data. This shape is compact, because the field names are not repeated on every row, and it suits charting libraries, spreadsheet-style code and any program that refers to columns by position.
Both array shapes keep the rows in the same order as the CSV. Blank lines in the file are skipped and do not create empty records. The status line counts the data rows, not the header, so a file with a header and 1,000 rows shows 1,000 records.
Nested objects from a.b headers works with Array of objects, Object by first column and JSON Lines. With Array of arrays every cell stays a single value in its column, because there are no keys to nest under.
CSV to JSON object online: keyed by the first column, or by columns
Sometimes you want one object instead of a list, so you can find a record by its key without searching. Choose Object by first column and the value in the first column becomes the key of each record. The other columns become that record's fields, and the key column itself is left out of the inner object, because it is already the key. A products sheet with sku, name and price turns into an object where each SKU points to its name and price.
Keys in JSON objects are always text, so a first column of 1, 2 and 3 gives the keys "1", "2" and "3". Each key should be unique. If two rows share the same value in the first column, the later row replaces the earlier one, so the record count in the output can be lower than the rows in the file. Sort out duplicates first if every row matters, or use Array of objects instead.
Object of columns turns the table on its side. Each header becomes a key, and its value is an array holding that column from top to bottom. This is handy for charts, where you often need all the dates in one list and all the values in another, and for quick sums or averages over one column.
If you need a csv to json object online for a config file, a translation table or a lookup map, put the key in the first column of your sheet, export it as CSV or upload the .xlsx file, and pick Object by first column. A two-column sheet with a code and a label gives an object where each code holds its label as a field.
JSON Lines for logs, streams and bulk imports
JSON Lines, also called NDJSON, writes one complete JSON object per line, with no square brackets around them and no commas between them. Each line is the same object you would get with Array of objects, written on a single line whatever indent you picked. The download is saved with a .jsonl ending, and the button reads Download JSONL.
This shape is made for big data and streams. A program can read a JSON Lines file one line at a time instead of loading everything at once, many logging systems store events this way, and several databases, search engines and machine learning tools accept it for bulk imports. Adding a record later is as simple as adding a line.
Keep in mind that a JSON Lines file is not one JSON document. If you paste it into a strict JSON validator, it reports extra text after the first line. That is expected. If the program you are using wants a single JSON value, choose Array of objects instead.
How the CSV is read: separators, quotes and line breaks
CSV looks simple, but real files are full of commas inside names, quotes inside quotes and line breaks inside addresses. The tool reads CSV the way the RFC 4180 standard describes, so these cases come out right instead of breaking a row in half.
A field that starts with a double quote runs until the closing quote, even if it holds the separator or a line break. Two double quotes in a row inside a quoted field mean one real quote. A quote in the middle of an unquoted field is kept as an ordinary character. Line endings from Windows, Mac and Linux are all understood, and a byte order mark at the start of the file is removed.
The separator does not have to be a comma. Many European spreadsheets save CSV with semicolons, because the comma is used as the decimal mark. Database exports and copies from a spreadsheet are often separated by tabs, and some systems use a pipe. Leave the setting on Auto and the tool tries comma, semicolon, tab and pipe on the start of the text, then keeps the one that gives the most columns with the same count on every row. The status line names the separator it used.
If Auto picks the wrong one, which can happen with a file of only one column or with very uneven rows, click the right separator yourself. The output and the preview table change straight away.
| Case | In the CSV | In the JSON |
|---|---|---|
| Comma inside a value | 3,"Chen, Li",Taipei | "name": "Chen, Li" |
| Quote inside a value | "The ""Blue"" Cafe" | "The \"Blue\" Cafe" |
| Line break inside a value | A quoted address over two lines | One value with \n where the break was |
| Semicolon file | id;name;price | Auto picks Semicolon |
| Tab-separated (TSV) | Columns pasted from a spreadsheet | Auto picks Tab |
First row has the names, or column1, column2
Most CSV files start with a row of column names, and First row has the names is ticked to match. Those names become the keys of every object. If a header cell is empty, that column gets a fallback name such as column3, so no value is lost. With Trim spaces ticked, spaces around header names are removed too, which stops keys like " price" from appearing.
Some files have no header row at all: raw exports, sensor logs or lists you typed by hand. Untick First row has the names and every row is treated as data. The keys are then column1, column2, column3 and so on, counted from the left. The preview table shows the same names, so you can check them before you download.
Header names are used exactly as written, including capitals and spaces. If the code that reads your JSON expects keys like first_name, rename the headers in your sheet before you export, or edit the first line of the CSV in the input box. Every change shows up in the output at once.
Numbers, true/false and null as real JSON types
A CSV file has no types: everything in it is text. JSON does have types, and a number written as 42 behaves differently from the text "42" in most programs. With Numbers, true/false and null as JSON types ticked, each cell is checked and written as the matching JSON value.
Whole numbers, decimals, negative numbers and numbers with an exponent, such as 1.5e3, become JSON numbers. The words true and false, in any mix of capitals, become booleans, and the word null becomes JSON null. Everything else, including dates, stays text, because JSON has no date type and text is the safest way to keep a date exact.
Some things look like numbers but are not. A zip code such as 00100, a phone number such as 0471 or an ID with a leading zero would lose that zero if it were turned into a number, so any value with a leading zero stays text. Very long digit strings, such as card-style IDs and order numbers with more than 15 digits before the point, also stay text, because JavaScript cannot hold them exactly as numbers. A plain 0 and decimals like 0.5 still become numbers.
Untick the option and every value stays a string, exactly as it appears in the file. That is the right choice when the receiving system wants to decide the types itself, or when every column is an ID or code.
| Cell | JSON value | Type |
|---|---|---|
| 42 | 42 | Number |
| -3.75 | -3.75 | Number |
| 1.5e3 | 1500 | Number |
| TRUE or false | true, false | Boolean |
| null | null | JSON null |
| 00100 | "00100" | Text: leading zero kept |
| 2026-01-04 | "2026-01-04" | Text: JSON has no date type |
| 1,000 | "1,000" | Text: thousands separators are not numbers |
Nested objects and arrays from a.b headers
CSV is flat, but JSON often is not. With Nested objects from a.b headers ticked, a dot in a header name means one level deeper. The headers address.city and address.zip build an address object with a city and a zip inside it, instead of two flat keys with dots in their names. You can go as deep as you like: customer.address.city gives three levels.
A number after the dot builds an array. The headers tags.0, tags.1 and tags.2 give a tags array with three items, and orders.0.sku with orders.0.qty gives an orders array whose first item is an object with a sku and a qty. This is the same naming JSON to CSV uses when it flattens nested data, so a file can make the round trip and come back with its structure.
Untick the option if your headers contain dots for another reason, such as version numbers or file names like report.pdf. The dotted names are then kept as plain keys. Nesting applies to Array of objects, Object by first column and JSON Lines; Array of arrays and Object of columns keep the headers as they are.
| Headers | One record in the JSON |
|---|---|
| address.city, address.zip | {"address": {"city": "Pune", "zip": "411001"}} |
| tags.0, tags.1 | {"tags": ["new", "vip"]} |
| orders.0.sku, orders.0.qty | {"orders": [{"sku": "A1", "qty": 2}]} |
| customer.address.city | {"customer": {"address": {"city": "Leeds"}}} |
Empty cells: null, an empty string or left out
Empty cells are common: a missing date, an unknown phone number, a field that only applies to some rows. The Empty cells setting decides how they are written. null writes JSON null, which most programs read as no value. "" writes an empty string, which suits systems that expect text in every field. Leave out drops the key from that record entirely, so the object only holds the fields that have a value.
Leave out works with the object shapes: Array of objects, Object by first column and JSON Lines. In Array of arrays and Object of columns every position has to hold something to keep the columns lined up, so empty cells there become empty strings instead.
A cell that holds only spaces counts as empty when Trim spaces is ticked. With Trim spaces off, the spaces are kept as a value.
CSV to JSON Excel: turn an .xlsx sheet straight into JSON
You do not need to save a spreadsheet as CSV first. Press Upload CSV / Excel, or drop the file on the box, and choose an Excel .xlsx file. The tool reads the first visible sheet, writes it into the input box as comma-separated text, and the JSON is made from that in the usual way. Hidden sheets are skipped.
Cells are read as their real values, not as the formatted text you see in Excel. A price shown as $1,250.00 comes through as 1250, a percentage shown as 15% comes through as 0.15, and dates are written as ISO dates such as 2026-01-04, which sort and parse cleanly. Formulas give their last calculated result. This route from csv to json excel files is handy for price lists, contact sheets and product catalogues that live in a workbook.
If you need a different sheet, open the workbook in Excel or another spreadsheet app and move the sheet to the front, or hide the sheets before it, then save and upload again. Older .xls files are not read directly: save them as .xlsx or CSV first. To get CSV out of a workbook instead of JSON, Excel to CSV does that, and Excel to PDF makes a printable copy.
Accents, other scripts and special characters
Names with accents, currency signs, emoji and text in other scripts, such as Hindi, Arabic, Chinese or Cyrillic, all come through as long as the file is saved as UTF-8. The JSON is written as UTF-8 too, and characters are kept as they are rather than turned into escape codes, so the output stays readable.
Inside JSON strings, a few characters always need a backslash, and the tool adds it for you. A double quote in a value becomes \", a backslash becomes \\, a tab becomes \t and a line break from a quoted multi-line cell becomes \n. When the JSON is read back by a program, each one turns into the original character again, so nothing is lost.
If you see characters such as é, ’ or a row of question marks, the file was saved in an older encoding, often Windows-1252 or another regional code page, and the text was misread before the conversion started. The fix is in the source: save the file again as CSV UTF-8, or upload the .xlsx workbook, which always stores text in Unicode.
Large files up to 300 MB
Files up to 300 MB can be opened. Small and medium data is converted live: every change you make updates the output after a short pause. Once the text grows past about 3 MB, live updates stop so the page stays responsive. The input box then shows only the start of the text with a note of the full size, and a Convert to JSON button appears. Change the settings first, then press it once.
The output box also shows only the first part of a very long result, to keep scrolling smooth, but Copy and Download always use the whole JSON. The preview table shows the first 50 rows and up to 30 columns, which is enough to check that the separator and the header are right.
What your device can handle depends mostly on its memory, because everything happens inside the browser tab. A desktop or laptop copes with much larger files than a phone. If a big file is slow, close other tabs, pick Minified so the output is smaller, and choose JSON Lines when the receiving program can read it.
Which shape fits your job
| Job | Shape | Tip |
|---|---|---|
| Sending records to a web API or an app | Array of objects | 2 spaces while testing, Minified for production |
| Test fixtures and mock data | Array of objects | 2 spaces, so changes are easy to review |
| Lookups by ID, SKU or code | Object by first column | Make sure the first column is unique |
| Charts and column statistics | Object of columns | Minified to keep the file small |
| Compact data where order matters | Array of arrays | Keep the header row ticked so positions are labelled |
| Bulk imports, logs and very large files | JSON Lines | Saved as .jsonl, one record per line |
CSV and JSON compared
CSV and JSON both store data as plain text, but they think about it differently. CSV is a grid: rows and columns, with the column names in the first row if there are any. It is small, every spreadsheet can open it, and it is easy to read for people who work with tables. It has no types, no nesting and no single agreed standard, so files from different programs vary in separators, quoting and encoding.
JSON is a tree. Every value has a type, objects carry their own field names, and data can be nested as deep as needed: a customer can hold an address, and an order can hold a list of items. It is the everyday format of web APIs, configuration files and document databases, and almost every programming language reads it out of the box. The cost is size, because field names repeat in every record, and it is harder to edit by hand in bulk.
That is why data often starts as CSV and ends up as JSON. People collect and edit it in a spreadsheet, where it is easy to work with, and programs consume it as JSON, where it is easy to use. The settings on this page are the bridge: they decide how a flat grid of text becomes typed, structured data.
| Point | CSV | JSON |
|---|---|---|
| Structure | Flat rows and columns | Objects and arrays, nested to any depth |
| Types | Everything is text | Strings, numbers, true and false, null |
| Field names | Once, in the header row | In every object (except array shapes) |
| Size | Small | Larger, smaller when minified |
| Best edited in | A spreadsheet | A code editor |
| Typical use | Exports, reports, data entry | APIs, apps, configs, databases |
Preparing a spreadsheet before you export
Most CSV files come out of a spreadsheet, and a minute of care before you export saves time later. Put the field names in the first row, one per column, spelled the way your code expects. Remove title rows, notes and blank rows above the header, and totals or comments below the data, because every row becomes a record.
In Microsoft Excel, choose File, Save As or Save a Copy, and pick CSV UTF-8 (Comma delimited). That keeps accents and other non-English characters intact. Or skip the export and upload the .xlsx file here directly. In Google Sheets, choose File, Download, Comma-separated values; the download is the current sheet. In LibreOffice Calc, choose File, Save As, pick Text CSV, tick Edit filter settings and set the character set to UTF-8. In Apple Numbers, choose File, Export To, CSV, and pick Unicode (UTF-8) as the text encoding.
Columns that hold IDs, zip codes or phone numbers are the usual weak spot. Spreadsheets often turn them into numbers and drop leading zeros before you ever export. Format those columns as text in the sheet before typing or pasting the data, and the zeros survive. The same goes for long numbers, which a spreadsheet may show in scientific notation such as 1.23E+15.
If you only need a quick test, you do not need a file at all. Select a range of cells in any spreadsheet, copy it and paste it into the input box. The copy arrives as tab-separated text, Auto picks Tab, and the JSON appears straight away.
The round trip: JSON to CSV and back
Data often has to move both ways. A product list may be edited in a spreadsheet, turned into JSON for a website, and later turned back into a table for a report. The naming used here makes that round trip work: JSON to CSV writes nested fields as dotted columns such as address.city and numbered columns such as tags.0, and this page reads those same names back into nested objects and arrays.
For a clean round trip, keep Nested objects from a.b headers ticked, use the same column names in both directions, and choose Array of objects. Watch the types: once the data has been in a spreadsheet, a value like 007 may already have lost its zeros, and true may have become TRUE, which is still read as a boolean here. After converting, paste the result into JSON Formatter to check it and compare it with the original.
Using the JSON in your code
The JSON you download is standard JSON, so any language can read it. In JavaScript, JSON.parse turns the text into objects and arrays, and a fetch call can load the file from your server. In Python, json.load reads a .json file into lists and dictionaries, and for a .jsonl file you read it line by line and parse each line on its own. Most other languages, from Java and C# to Go and PHP, have a JSON reader built in or one standard package away.
For a website, the simplest route is often to save the download as a static file, such as data/products.json, next to your pages. The page can then fetch it when it loads and draw a list, a table or a map from it, with no database or server code. When the sheet changes, convert it again and replace the file.
For command-line work and scripts, Minified output keeps files small, and JSON Lines lets a script read a huge file one record at a time without holding all of it in memory. Many command-line JSON tools can filter and reshape either form, and most databases with a JSON import accept an array of objects or one object per line.
If the reading code expects numbers, keep Numbers, true/false and null as JSON types ticked, so you do not have to convert strings later. If it expects every field to exist, use null or "" for empty cells rather than Leave out. If it uses the field names directly, check the header row in the preview table before you download, because a stray space or a different capital letter gives a different key.
Common jobs it helps with
Feeding a web app
Turn a spreadsheet of products, places or team members into an array of objects that your front-end code can loop over.
Building test data
Write test cases in a sheet, where they are easy to edit, and turn them into JSON fixtures for unit tests or a mock API.
Importing into a database
Many document databases and search tools import JSON or JSON Lines directly. Use Minified or JSON Lines for big batches.
Making config and translation files
Keep keys and labels in a two-column sheet and pick Object by first column to get a lookup object.
Preparing chart data
Choose Object of columns to get one array of dates and one array of values, the format many chart libraries want.
Checking an export
Paste an export from another system and read the preview table to see whether quotes and separators were written correctly.
A CSV to JSON online tool for every device
Because it is a csv to json online tool, there is nothing to install. It works in current versions of Chrome, Edge, Firefox and Safari on Windows, macOS, Linux and ChromeOS, and in mobile browsers on Android phones, iPhones and iPads.
On a computer, dragging a file onto the box is the fastest way in, and you can paste columns copied from a spreadsheet straight into the input as tab-separated text. On a phone or tablet, press Upload CSV / Excel to pick a file from your files app, cloud drive or downloads. The boxes stack one above the other on small screens, and the download goes to your usual downloads folder.
Once the page has loaded, the conversion itself runs on your device, so it keeps working if your connection drops for a moment. Reloading the page needs a connection again.
Keep CSV to JSON free of surprises: quick checks and tips
To keep csv to json free of surprises, take thirty seconds to check three things before you download: the separator in the status line, the keys in the preview table header, and one or two values in the output, such as a zip code or a date. Those three checks catch almost every problem described below.
Check the status line first
The record and field counts show at once whether the separator and header row are right. If you expected ten fields and see one, change the separator.
Keep IDs as text
Leading zeros already stay text. If other ID columns must stay text too, untick Numbers, true/false and null as JSON types, or give them a letter prefix in the sheet.
Name headers the way your code expects
Keys come straight from the header row. Fix spelling, capitals and spaces in the sheet before you export, and every record follows.
Use dots only for nesting
With Nested objects from a.b headers ticked, every dot in a header adds a level. Untick it if a header contains a dot for another reason.
Look at the preview table
It shows the first 50 rows as the parser read them. A value split across two columns usually means a missing quote in the file.
Pick Minified for machines
Indented JSON is easy to read, but Minified is smaller to store and send. Programs read both the same way.
Checking the JSON before you use it
Before you send the JSON on, give it a quick check. Start with the status line: the number of records should match the data rows in your sheet, and the number of fields should match its columns. A big difference usually points to the wrong separator, a missing quote or a header that is not in the first row.
Next, scroll the output to one record you know well and read it field by field. Are numbers numbers and IDs text? Did the nested objects appear where you expected them? Is an empty cell written the way the receiving program wants it? For a deeper look, paste the result into JSON Formatter, which validates it, shows it as a folding tree and lets you sort the keys.
Finally, test with the real program before converting thousands of rows. Convert a small slice of the file first, load it where it is going, and only then run the full file with the same settings. The settings are remembered in this browser, so the second run takes seconds.
Troubleshooting: when the result is not what you expected
Everything is in one field
The separator is wrong. Pick Semicolon, Tab or Pipe instead of Auto, or check that the file really uses the character you expect.
Rows are split in the wrong place
A value with a comma or line break is not quoted in the file, or a quote is missing at the end. Fix the source, or open the file in a spreadsheet and save it again as CSV.
Strange characters such as é or ?
The file was saved in an old encoding instead of UTF-8. Save it again as CSV UTF-8 from your spreadsheet app, or upload the .xlsx file, which avoids encoding problems.
Zip codes or IDs lost a zero
If the zero was missing before you started, the spreadsheet removed it when the file was saved. Format the column as text in the sheet, export again, or upload the .xlsx.
Numbers came out as text
Numbers, true/false and null as JSON types is off, the value has a thousands separator such as 1,000, or it uses a comma as the decimal mark. Only plain digits with a point are turned into numbers.
Fewer records than rows
With Object by first column, rows with the same first-column value replace each other. Blank lines are also skipped. Use Array of objects to keep every row.
Keys look like column1, column2
First row has the names is not ticked, or a header cell is empty. Tick it, or fill in the missing names.
A key has a dot in it, or a nested object appeared
Nested objects from a.b headers controls this. Tick it to nest address.city, or untick it to keep the dot in the key.
Copy does nothing
Some browsers block clipboard access. Press Download JSON instead, or select the output and press Ctrl+C, or Cmd+C on a Mac.
This CSV could not be read
The text could not be split into rows, which is rare. Try another separator, remove any text before the header, or save the file again from a spreadsheet.
CSV to JSON converter free for everyone, every time
This csv to json converter free page has no sign-up, no account, no watermark and no daily limit. Every shape, every setting and the 300 MB file size are open to everyone, every time.
There are no trial versions or locked buttons. If the page is useful, bookmark it: it opens with the shape, indent and value settings you used last.
Convert CSV to JSON for free, privately in your browser
Customer lists, sales figures and staff records should not travel further than they need to. Here they do not travel at all. The CSV or Excel file is read by your browser, parsed and converted by code in the page, and the JSON is built in your device's memory. Nothing is sent to a server, so you can convert csv to json for free without handing your data to anyone.
Only your settings, such as the shape and indent, are kept in this browser's local storage, so the page remembers them next time. The data itself is not saved anywhere: when you close the tab, it is gone. Clearing your browser's site data resets the settings too.
What to do next
Want to check or tidy the result? JSON Formatter validates it, shows it as a folding tree and can sort the keys. Need to go the other way? JSON to CSV flattens JSON back into a table, and JSON to Excel makes a real spreadsheet from it. Working from a workbook? Excel to CSV saves a sheet as CSV, and CSV to PDF turns a CSV into a printable table.
Frequently asked questions
Is this csv to json online free to use?
Yes. It is free with no account, no sign-up and no daily limit. Every shape and setting is open to everyone, and files up to 300 MB can be opened.
Is there a csv to json converter free of uploads, so my data stays private?
Yes. The file is read and converted by code running in your browser, and nothing is sent to a server. Only your settings are saved in this browser, never the data.
How do I make a csv to json array of objects?
Choose Array of objects under JSON shape and keep First row has the names ticked. Each data row becomes one object, with keys taken from the header row. Array of arrays gives one list per row instead.
How do I get a csv to json object online, keyed by ID?
Choose Object by first column. The value in the first column becomes the key of each record and the other columns become its fields. Make sure the first column is unique, because a repeated key replaces the earlier row.
Which csv to json format should I choose?
Array of objects suits most apps and APIs. Object by first column is for lookups, Object of columns is for charts, Array of arrays is compact and keeps order, and JSON Lines is for big imports and logs.
Can I use csv to json free on large files?
Yes. Files up to 300 MB can be opened. Above about 3 MB the output no longer updates live; set your options and press Convert to JSON. A computer handles big files better than a phone.
Does csv to json excel conversion work without saving as CSV first?
Yes. Upload an .xlsx file and the first visible sheet is read and converted. Values come through as real values, and dates are written as ISO dates such as 2026-01-04. Older .xls files need to be saved as .xlsx first.
Does the csv to json online tool work on a phone?
Yes. It works in modern mobile browsers on Android and iOS. Press Upload CSV / Excel to pick a file, then copy the JSON or download it. Very large files work better on a computer.
Can I convert csv to json for free without installing anything?
Yes. It runs in your browser, so there is no app, extension or plugin to install. Open the page, add your data and download the JSON.
Does it handle commas and line breaks inside values?
Yes. Quoted fields are read the RFC 4180 way, so a comma, a line break or a doubled quote inside quotes stays part of the value instead of starting a new column or row.
What does Auto do for the separator?
Auto tries comma, semicolon, tab and pipe on the start of the text and keeps the one that gives the most columns with the same count on every row. The status line names the separator it used.
What if my CSV has no header row?
Untick First row has the names. Every row is then treated as data, and the keys become column1, column2, column3 and so on.
Why did my zip code stay as text?
Values with a leading zero, such as 00100, stay text so the zero is not lost. Numbers with more than 15 digits before the point stay text too, because they cannot be held exactly.
How are true, false and null handled?
With Numbers, true/false and null as JSON types ticked, the words true and false in any case become booleans, and null becomes JSON null. Untick it to keep every value as text.
How do I create nested JSON from a flat CSV?
Tick Nested objects from a.b headers and use dots in the header names. address.city builds an address object with a city inside, and tags.0 and tags.1 build a tags array.
What happens to empty cells?
You choose under Empty cells: null writes JSON null, the empty quotes option writes an empty string, and Leave out removes the key from that record. Leave out applies to the object shapes.
What is JSON Lines and when should I use it?
JSON Lines puts one JSON object on each line with no outer brackets. It is used for logs, streams and bulk imports, and it downloads as a .jsonl file.
Can I choose the indent?
Yes. Pick 2 spaces, 4 spaces or Minified. Minified puts everything on one line with no extra spaces, which gives the smallest file.
Are dates converted to a date type?
No, because JSON has no date type. Dates stay as text. From an .xlsx file they are written in the ISO form, such as 2026-01-04, which most programs can parse.
Can I go back from JSON to CSV?
Yes, with the JSON to CSV tool on this site. It flattens nested objects into a.b columns, so a file can make the round trip and keep its structure.
Does it work offline?
Once the page has loaded, the conversion runs in your browser, so it keeps working if your connection drops. Reloading the page needs a connection.
Turn your CSV into JSON now
Paste, upload or try the sample, and see the JSON as you type. Free and private.
Start convertingLast updated October 2026 · Written and maintained by the FlipMyFormat team