"foo, \"bar\" baz"
Enter CSV text below:
This page hosts a CSV to JSON converter that runs entirely inside your browser tab. You paste comma separated text into the box above, press Convert, and the tool writes a JSON array of objects into the read-only output box. Nothing you paste ever leaves your computer for this conversion. The page makes no request to this server when you click Convert, and the page does not reload.
The conversion follows a fixed set of rules. The first non-empty line of your input becomes the header row. Every line after that becomes one object in the output array. The tool splits fields on commas only. It trims leading and trailing spaces around each cell. A cell wrapped in double or single quotes keeps any commas inside it and loses the surrounding quote characters. Every value stays a string. An empty cell becomes an empty string, not null and not a number. The output is always a JSON array of objects, pretty-printed with tab indentation.
A converter does not guess whether a numeric-looking string means a number or text. This tool does not guess. It never inspects the first data row for types, and it never converts any value to a number, boolean, or null. A decimal string stays that same string. The string "true" stays the string "true". That behavior is deliberate, and it comes straight from the code that runs the conversion.
The tool also has a Copy button. When you click it, the tool selects the contents of the JSON output box and issues the browser's copy command. A small popup then tells you the text was copied to the clipboard. The Reset button clears both boxes. Two notes sit above the form. One says the CSV text must have a header row. The other says this utility does not currently check for escaped quotes inside of like quotes.
This converter belongs to the Converter Tools category on this site. It is a free tool, and it shows no CAPTCHA. The conversion itself makes no request to this site at all. A shared site-wide throttle applies to page loads across every page of limitlessreferrals.info, including this one. That throttle blocks an address for the rest of the day if it makes roughly fifteen requests within a single second. Clicking Convert does not count against that throttle.
Five rules determine the output of this tool. Each rule is short. Each one was verified by running live tests against the real page on September 4, 2026.
The first non-empty line is the header. The tool splits your input on line breaks, then it removes empty and whitespace-only lines. The first line that survives becomes the header row, and its cells become the keys for every object in the output. If your file starts with a blank line, the tool skips it and uses the next line as the header.
The second rule is that every following line becomes one object. There is no mode where the tool builds one giant object instead of an array. The output is always an array of objects. A line with three cells becomes an object with three key-value pairs, using the header cells as keys.
The third rule is that fields are split on commas only. The tool has no delimiter option. Semicolons, tabs, and pipe characters have no special meaning. A line that reads "a;b" becomes a single column whose name is "a;b". A line that reads "1;2" becomes a single value "1;2" under that column.
The fourth rule is that quoted cells keep commas and lose their quotes. A cell wrapped in double quotes or single quotes can contain a comma, and that comma does not split the cell. The surrounding quote characters are removed from the final value. The live test with the input "Bob,,"New York, NY"" produced the city value "New York, NY" with the comma intact and the quotes gone.
The fifth rule is that every value stays a string, and an empty cell becomes an empty string. The live test with Ann, a numeric-looking age, and Paris produced that age as a string. The test with Bob and an empty age cell produced "" for that age. The test with Carl and a spaced number produced the trimmed digits as a string.
These five rules explain every output this tool can produce. They also explain every error. If your input has no header line, or if it has only a header line, the tool reports the error "Could not convert CSV to JSON: missing header" above the form. The JSON box keeps whatever was there before the failed attempt.
The previous version of this page described the tool in ways that do not match what the code actually does. This section names those differences so you can trust what you read here.
The old copy said the tool "takes a CSV file (or pasted CSV text)". That is wrong. This tool has no file input and no upload mechanism. You can only paste text into the CSV textarea. There is no way to browse your file system, and there is no download button for the JSON output either.
The old FAQ claimed that semicolon-delimited files can be converted. That is wrong. The tool splits fields on commas only. A semicolon-delimited line becomes a single column whose name contains the semicolon and the text after it. The live test with the input "a;b / 1;2" produced the output [{"a;b":"1;2"}], one object with one key and one value.
The old copy discussed the possibility that numbers might stay numbers. That discussion was misleading. This tool never keeps numbers as numbers because it never creates numbers at all. Every value is a string. The live test with a decimal score and a boolean word produced both as strings, with no type detection anywhere in the pipeline.
The old FAQ suggested that empty cells may become null. They do not. An empty cell becomes an empty string, written as "" in the JSON output. The live test with Bob's missing age produced "age":"", not "age":null.
The old copy entertained the idea that the output could be "one giant object instead of an array". That cannot happen here. The output is always a JSON array of objects, one object per data line, pretty-printed with tab indentation.
The old page also implied a level of CSV sophistication that the tool does not have. It does not check for escaped quotes inside of like quotes. It does not handle backslash-escaped quotes. It does not support line breaks inside a quoted cell. It does not offer a delimiter option. It does not produce array-of-arrays output or keyed-object output. It does not produce minified JSON. The only output mode is a pretty-printed array of objects.
The facts for this article come from a live test run on the real page on September 4, 2026. The testers pasted specific inputs and recorded the exact outputs. Those results appear in the table below.
That table shows mechanical consistency in the tool's behavior. Every result follows from the five rules, and none of the old page's claims about uploads, semicolons, number typing, or null values survived the tests.
One test shows the tool's behavior with quoted commas. The input with Bob and the quoted city "New York, NY" produced a value that kept the comma and lost the quotes. That is the one case where this tool behaves like a real CSV parser. The quotes protect the comma from splitting the cell, and the quotes themselves disappear from the value.
Another test shows the tool's limitation with semicolons. The line "a;b" became a single column named "a;b". If you paste European-style CSV that uses semicolons as delimiters, every line will collapse into one column. You would need to replace the semicolons with commas before pasting, and even then you must check whether any of your values contain semicolons that should stay.
You will get the best results from this tool if you prepare your CSV text before you paste it. The preparation takes a minute and follows directly from the conversion rules.
Use commas as your only delimiter. If your data comes from a spreadsheet program that exports with semicolons, open the file in a text editor and replace the semicolons with commas. Do this only if no value contains a semicolon that you want to keep. A value like "Paris; France" would lose its semicolon if you did a blind replace, so check your data first.
Make sure your first non-empty line is the header. The tool uses that line to name the keys in every object. If your file has a title line above the header, delete it. If your file has blank lines at the top, the tool skips them, but a missing header anywhere means the conversion fails with the missing header error.
Quote any cell that contains a comma. A cell like New York, NY needs to be wrapped in double quotes or single quotes so the comma stays inside the value. The tool will split on the comma if you leave the cell unquoted, and you will end up with extra columns that do not match your header.
Keep quoted cells on one line. This tool does not support line breaks inside a quoted cell. If a quoted value spans two lines, the tool splits the line anyway, and the second half of your value becomes a new data row with too few cells.
Do not use backslash-escaped quotes inside a quoted cell. The tool does not check for escaped quotes. If you write "say "hi"" as your cell, the backslashes and the inner quotes stay in the value. The live test produced a note value that kept both the backslashes and the inner quotes. If you need to include a double quote inside a quoted value, you cannot do it cleanly with this tool.
Remove trailing and leading spaces that you do not want. The tool trims spaces around each cell, so a spaced number becomes the bare digits. If you want to keep a leading space in a value, this tool will not let you.
Check for ragged rows. If one of your data lines has more cells than the header, the extra cells are dropped. If a data line has fewer cells than the header, the missing cells become undefined and are simply omitted from that object. The output stays valid JSON, but the shape of your objects will vary from row to row.
Clean input depends on three habits, using commas only, quoting cells that contain commas, and keeping every logical row on one physical line.
Ragged rows are data lines that do not have the same number of cells as the header. Spreadsheet exports sometimes produce them when a field contains an unquoted comma or when a row was edited by hand. This tool handles ragged rows without crashing, but the result may not be what you expect.
If a data line has more cells than the header, the tool drops the extra cells. Suppose your header is name,age and your data line is Ann,30,Paris. The tool creates an object with name "Ann" and age "30", and it ignores the Paris cell entirely. Your output loses data, and you get no warning that a cell was dropped.
If a data line has fewer cells than the header, the tool creates an object with only the cells that exist. Suppose your header is name,age,city and your data line is Ann followed by an age value. The tool creates an object with name "Ann" and age "three times ten", and the city key is simply absent from that object. The value for city is undefined, and undefined values are omitted from the JSON output.
That behavior means your output array can contain objects with different key sets. Some objects may have a city key, and others may not. JSON allows this, and most parsers will handle it, but any code that assumes every object has the same shape will need to check for missing keys.
The tool gives you no error for ragged rows. It does not tell you that a cell was dropped or that a key is missing. You have to inspect the output yourself. If your data comes from a reliable export, ragged rows should be rare. If you are pasting hand-typed CSV, count the commas in each line before you convert.
There is one special case of raggedness that does produce an error. If your entire input is just a header line, the tool reports "missing header". That error message is technically odd, because you did provide a header. The tool means that there are no data lines after the header, so there is nothing to convert into objects.
Every value that comes out of this tool is a string. The age "three times ten" is not the numeric value thirty. The score "3.5" is not the number 3.5. The boolean "true" is not the boolean true. This behavior comes from the small open-source CSV parser that the tool uses, and the tool never applies any type detection after parsing.
There are reasons to like this behavior. CSV files have no type information. The text "three times ten" could mean the number thirty, the year nineteen thirty, the ZIP code three zero zero three zero, or an ID that happens to be digits. A converter that guesses types can corrupt data by turning "00123" into the number 123 or by turning a long numeric ID into scientific notation. This tool avoids all of those problems by keeping everything as text.
There are also reasons to find this behavior inconvenient. If you want to sum a column of ages or compare a column of scores, you need numbers. You will have to convert the strings yourself after the conversion. The tool does not offer a mode for that.
JavaScript provides the simplest fix. If you paste the JSON output into a script, you can map over the array and convert specific fields with Number() or parseFloat(). For the age field, you would write something like data.map(row => ({...row, age: Number(row.age)})). For a field that might be empty, check that the string is not "" before converting, because Number("") returns 0, which is probably not what you want for a missing value.
Another fix is to use a tool that does type detection. Many online CSV to JSON converters inspect the first data row and guess types from the values they see. Those tools can produce null for empty cells and numbers for numeric-looking strings. If you need that behavior, this tool is not the right choice.
A third fix is to clean your data before conversion. If you know that the age column should always contain numbers, replace any empty cell with a placeholder like 0 before you paste. The tool will still output "0" as a string, but at least the value is present and you can convert it in one pass.
This tool preserves your data faithfully as text, and the cost of that fidelity is that you must handle type conversion yourself.
This section lists the limits of the tool, all derived from reading the code and running the live tests. Knowing these limits will save you from pasting a file and expecting an output that never comes.
This tool cannot read a file from your disk. There is no upload button, no file picker, and no drag-and-drop zone. You must copy your CSV text and paste it into the textarea.
This tool cannot handle semicolon, tab, or pipe delimiters. It has no delimiter option, and it does not auto-detect the delimiter. A semicolon-delimited file becomes one column per line.
This tool cannot process backslash-escaped quotes inside a quoted cell. If your CSV uses the standard backslash escape for a quote character, the backslash and the inner quote both stay in the output value.
This tool cannot keep a line break inside a quoted cell. It splits lines on line breaks before it parses quotes, so a multi-line quoted value becomes two separate rows.
This tool cannot produce output in any format other than a JSON array of objects. There is no array-of-arrays mode, no keyed-object mode, and no minified output mode. The indentation is always tabs.
This tool cannot detect types. It never looks at the first data row to guess whether a value is a number, a boolean, or null. Every value is a string.
This tool cannot convert a header-only input. If your CSV has a header but no data rows, you get the missing header error.
This tool cannot guarantee that the Copy button works in every browser. The Copy button relies on the older execCommand copy method. Modern browsers still support it in many cases, but some browsers and some browser settings ignore it. If the copy popup does not appear, select the JSON text manually and press Ctrl+C or Cmd+C.
This tool has no explicit size limit, but it runs in the browser's memory. A very large CSV file could slow down your browser or crash the tab. There is no server-side processing to handle big files for you.
This tool is a narrow, predictable converter for simple comma separated text, and it makes no pretense of handling the full CSV specification.
The conversion on this page happens entirely in your browser. The tool uses a small open-source CSV parser and the built-in JSON.stringify function. No data is sent to any server, and the page does not reload when you click Convert.
That design has a privacy benefit. If your CSV contains customer names, email addresses, or any other sensitive data, that data never leaves your computer during the conversion. You are not uploading it to limitlessreferrals.info or to any third party. The only network request that happens on this page is the page load itself.
The design also has a practical benefit. There is no waiting for a server to respond. The conversion is instant for any input that fits in the browser's memory. You can convert a thousand rows as quickly as you can convert ten rows.
The browser-only design does have one consequence for the Copy button. Because the tool cannot send the result to a server and get a clipboard write back, it must use the browser's own copy command. That command requires the text to be selected in the page. The Copy button does that selection for you and then issues the copy command. If the browser blocks the command, you will see no popup, and you will need to copy manually.
The rate limit on this site does not apply to the conversion. The site-wide throttle, which blocks an address for the rest of the day after roughly fifteen requests within a single second, applies only to page loads. Clicking Convert makes no request at all, so you can convert as many times as you like without hitting that throttle.
You should still be aware that the page itself is subject to the throttle. If you reload this page many times in one second, you could block your own address for the day. Normal use, one page load followed by many conversions, will never trigger it.
The tool relies on a small open-source CSV parser. That parser does the line splitting, the comma splitting, and the quote handling. The rest of the conversion, building the array of objects and pretty-printing the JSON, uses the browser's built-in JSON.stringify.
The parser is not a full implementation of the CSV specification. The real CSV standard, documented in RFC 4180, includes rules for escaped quotes, optional spaces, and line breaks within quoted fields. This parser implements a subset of those rules. It handles quoted cells that contain commas. It does not handle escaped quotes or line breaks inside quotes.
That subset is enough for many real-world files. Spreadsheet exports that use commas as delimiters and double quotes around cells with commas will convert cleanly, as long as the file does not contain escaped quotes or multi-line values.
The parser trims leading and trailing spaces around each cell. That means a header cell " name " becomes the key "name", and a data cell with spaces around digits becomes the bare digit string. If your data intentionally includes leading or trailing spaces, this tool will remove them.
The parser treats single quotes the same as double quotes. A cell wrapped in single quotes keeps commas inside it and loses the single quotes. That is a convenience for hand-typed input, but it means you cannot use single quotes as literal characters around a value that also contains a comma.
The parser does not validate that every row has the same number of cells as the header. It processes each line independently. Extra cells are dropped, and missing cells are omitted from the object. This permissive behavior keeps the conversion from crashing, but it can silently lose data.
If you need to convert a different data format, the XML to JSON Converter on this site handles XML input with a similar browser-only approach.
If your CSV file contains duplicate lines that you want to remove before conversion, run it through the Duplicate Line Remover first to clean up your data.
If your CSV values contain percent-encoded URLs or other encoded text that you want to decode before or after conversion, the URL Decoder Encoder can handle that transformation.
No. The conversion runs entirely in your browser with a small open-source CSV parser and the built-in JSON.stringify. No data is sent to this site or to any third party, and the page does not reload when you click Convert. The only network request is the page load itself.
Because this tool splits fields on commas only. It has no delimiter option and no auto-detection. A line like "a;b" becomes a single column named "a;b". To convert semicolon-delimited data, replace the semicolons with commas in your text editor before pasting, but only if no value contains a semicolon you want to keep.
The tool never inspects values for types. Every cell becomes a string, so a numeric-looking value stays text, a decimal stays text, and "true" stays text. This prevents accidental corruption of IDs and codes. If you need actual numbers or booleans, convert the relevant fields after the conversion using JavaScript's Number() function or a comparison to the string "true".
It means the tool could not find a header row followed by at least one data row. If your input has no non-empty lines, or if it has only a header line, the conversion fails with that error. The JSON box keeps whatever content it had before the failed attempt.
This tool handles quoted commas. A cell like "New York, NY" keeps its comma and loses its quotes. It does not handle escaped quotes. If your cell contains a backslash-escaped quote, the backslash and the inner quote stay in the output value. Line breaks inside a quoted cell are also not supported.
The Copy button uses the older execCommand copy method, which some modern browsers and browser settings ignore. If you see no "copied to clipboard" popup, select the JSON text manually and press Ctrl+C on Windows or Cmd+C on a Mac. The conversion itself still works correctly.