How to Convert a CSV to a JSON Database (In Your Browser, No Upload)
A CSV is a flat table. JSON is a tree. Converting between them is one of the most common tasks in modern data work, and a good converter handles quoting, escapes, type inference, and the dozen edge cases that bite you in production. Here is what a converter does, and how to convert without uploading your data.
Open a browser-based CSV to JSON converter like the <a href="/csv-json-converter">Uttir CSV to JSON Converter</a>. Paste the CSV (or upload the file), pick the output format (array of objects, array of arrays, or nested tree), toggle type inference on if you want numbers and booleans to be detected automatically, and download the result. The whole conversion runs in your browser, so the data never leaves your device. For a 10,000-row CSV, conversion takes about 1 second.
A CSV is a flat table: rows of values, separated by commas, with a header row. JSON is a tree: nested objects and arrays, with types. Converting between them is one of the most common data tasks, and it is one of the most common places to introduce bugs. The bugs are in the edge cases: a comma inside a quoted field, a newline inside a quoted field, a field that looks like a number but should be a string, an empty field that should be null.
A good converter handles those edge cases for you. Here is what to look for, and how to use one without uploading your data to a server.
The three output shapes
CSV has one shape: a table. JSON has many. The three most common output shapes from a CSV converter:
Array of objects. Each row becomes an object, the header row becomes the keys, the row values become the values. [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]. This is the most common format; it is what most JSON APIs return when you ask for "a list of records".
Array of arrays. Each row becomes an array, the header row is included as the first array. [["name", "age"], ["Alice", 30], ["Bob", 25]]. This is the format you want when the JSON is going to be processed by code that does not care about the header names (e.g. a generic table renderer).
Nested tree. Each row becomes a nested object, with the keys from a specified column as the path. {"users": {"alice": {"name": "Alice", "age": 30}}}. This is the format you want when the JSON is going to be consumed by code that does a lot of nested lookups (e.g. data.users.alice.age). It is also the format you want when the JSON will be saved to a document database like MongoDB or Firestore.
The Uttir CSV to JSON Converter supports all three. Pick the one that matches your downstream consumer.
Type inference (the most important toggle)
By default, every value in a CSV is a string. Even if the value is 30, the converter reads it as the string "30". That is technically correct (a CSV does not have types), but it is usually not what you want: you want 30 to be the number 30, true to be the boolean true, and null to be null.
Type inference is the toggle that fixes this. When it is on, the converter looks at each value and asks: is this a number? A boolean? Null? If yes, output it as that type. If no, output it as a string. The rules are:
- If the value is a valid number (integer, float, negative, scientific notation), output as a number.
- If the value is
trueorfalse(case-insensitive), output as a boolean. - If the value is empty or
nullorNAorN/A, output as null. - Otherwise, output as a string.
The risk: a value like 007 looks like a number but is actually a string (it is a product code, not a quantity). The converter will output it as the number 7, dropping the leading zeros. To prevent this, either turn off type inference or specify which columns should be excluded from inference. The Uttir CSV to JSON Converter has a "force string" toggle for specific columns.
The five CSV edge cases that bite you
1. Quoted fields with commas inside. A field like "Smith, John" is a single field, not two. The parser must respect the quotes and treat the comma inside as part of the value. A naive parser that splits on commas will turn this into two fields.
2. Quoted fields with newlines inside. A field that spans multiple lines (e.g. an address) is wrapped in quotes, and the newline inside is part of the value. A naive parser that splits on newlines will break the row in two.
3. Escaped quotes inside quoted fields. A field with a quote inside is written as "He said ""hello""" — the inner quotes are doubled. A naive parser that does not understand escaping will output the wrong value.
4. UTF-8 BOM. Microsoft Excel saves CSV files with a UTF-8 byte order mark at the start, which is not part of the data. A naive parser will treat it as part of the first header name, and the first column key will be name instead of name.
5. Different delimiters. Some CSV files use semicolons (especially European ones, where the comma is the decimal separator), tabs (TSV), or pipes. The converter should auto-detect or let you specify the delimiter.
A good converter handles all five. The Uttir CSV to JSON Converter does; a regex you wrote in 10 minutes probably does not.
How to convert a 10,000-row CSV
- Open the Uttir CSV to JSON Converter in your browser.
- Paste the CSV into the input area, or drag the file onto the page. The file is read locally; it is not uploaded.
- Set the output format (array of objects, array of arrays, or nested tree).
- Toggle type inference on, unless you have columns that look like numbers but should be strings (IDs, codes, phone numbers).
- Hit Convert. The result appears in the right panel.
- Verify the output. Look at the first few rows: are the types correct? Are the keys right? Are there any unexpected nulls?
- Download the result as a
.jsonfile or copy to clipboard.
For a 10,000-row CSV, the whole process takes 1-2 seconds. For a 1,000,000-row CSV, it takes 30-60 seconds and you should expect a brief browser pause while the conversion runs.
What to do with the JSON after
Once you have JSON, the downstream consumers are usually one of three:
An API. Wrap the array in a top-level object with a data or results key. Most APIs expect {"data": [...]}, not a bare array. Most converters let you add a wrapping key in the output options.
A database. If you are loading into a SQL database, the JSON shape is the wrong shape — you want a flat table, which is what you started with. If you are loading into a document database (MongoDB, Firestore, CouchDB), the array of objects is exactly right; each object becomes a document.
A code project. If you are loading the JSON in JavaScript, TypeScript, Python, or any other language, the array of objects deserializes into an array of dicts/objects. If the JSON is in a file, use JSON.parse(fs.readFileSync("data.json")) or the equivalent. If it is in an API response, the language's HTTP client usually parses it for you.
How to spot a bad conversion
Three quick checks:
- Row count. The number of JSON objects should equal the number of CSV rows. If it does not, some rows got merged or split.
- Column count. Every object should have the same number of keys. If one object has 5 keys and another has 4, the CSV had a row with a missing column.
- Value sanity. Look at the first row: are the values what you expect? Are numbers still numbers? Are strings not garbled? Are nulls not empty strings?
If the row count or column count is wrong, the CSV is malformed (likely a stray unescaped quote). The JSON Validator will tell you which row is the problem.