Convert between CSV and JSON formats
CSV and JSON model data differently. CSV is flat and rectangular: every row has the same columns, every cell is a string, and there is no native way to express nesting, arrays inside cells, or missing-vs-empty distinctions. JSON is hierarchical and typed: objects contain other objects, arrays contain values of any type, numbers are numbers, booleans are booleans, null is not the same as an empty string. Converting between them means deciding how to bridge that structural gap. By default this tool produces an array of objects where each row is an object keyed by the column headers; this is the shape most tools expect. Type inference is where this tool earns its keep over a naive converter. A cell containing "42" in CSV is a string (CSV has no types), but in JSON it almost always wants to be the number 42. Similarly "true" and "false" should become JSON booleans, not strings, and empty cells can become null rather than empty strings. In Auto-detect mode the converter emits proper JSON types, and you can switch the value handling to keep everything as strings, parse only numbers, or leave values untouched. Numeric strings with leading zeros ("007") stay strings even in Auto mode, because the value only converts to a number when its string form round-trips exactly, so phone numbers, postal codes, and barcodes are preserved.
Initializing in your browser…
Transform CSV columns with 25+ operations: text manipulation (uppercase, lowercase, trim), number formatting, date conversion, extraction patterns, and custom pipelines
Convert images between PNG, JPG, WebP, AVIF, BMP formats. Features quality control, transparency support, and batch conversion for efficient workflow.
View and edit CSV files in a spreadsheet-like interface
A frontend needs the product CSV as a JSON array to seed a local mock API.
CSV
sku,name,price A1,Mug,9.5 A2,Cap,14
JSON
[
{ "sku": "A1", "name": "Mug", "price": 9.5 },
{ "sku": "A2", "name": "Cap", "price": 14 }
]The header row becomes object keys and numeric-looking values are typed as numbers (not strings), so the JSON is immediately usable in code rather than needing a second cleanup pass. You can also choose array-of-arrays or NDJSON for streaming consumers.
CSV and JSON model data differently. CSV is flat and rectangular: every row has the same columns, every cell is a string, and there is no native way to express nesting, arrays inside cells, or missing-vs-empty distinctions. JSON is hierarchical and typed: objects contain other objects, arrays contain values of any type, numbers are numbers, booleans are booleans, null is not the same as an empty string. Converting between them means deciding how to bridge that structural gap. By default this tool produces an array of objects where each row is an object keyed by the column headers; this is the shape most tools expect. Type inference is where this tool earns its keep over a naive converter. A cell containing "42" in CSV is a string (CSV has no types), but in JSON it almost always wants to be the number 42. Similarly "true" and "false" should become JSON booleans, not strings, and empty cells can become null rather than empty strings. In Auto-detect mode the converter emits proper JSON types, and you can switch the value handling to keep everything as strings, parse only numbers, or leave values untouched. Numeric strings with leading zeros ("007") stay strings even in Auto mode, because the value only converts to a number when its string form round-trips exactly, so phone numbers, postal codes, and barcodes are preserved.
For CSV-to-JSON you choose among four output shapes. Array of objects (`[{"name": "Alice""age": 30}, ...]`) is the most human-readable and is what most JavaScript code expects, but it repeats the key names on every row. The "object with data and count" shape wraps that array in `{ "data": [...], "count": N }` so a consumer can read the row total without scanning. The keyed shape turns the array into a single object indexed by a key column you pick (`{ "alice@example.com": {...}, ... }`), handy for lookups by id. The columnar shape transposes the data into one array per column (`{ "name": ["Alice""Bob"], "age": [30, 25] }`), which is compact and convenient for plotting libraries. When there is no header row the output is an array of arrays instead, with an optional leading row index. Indentation is selectable: minified, two spaces, or four.
JSON-to-CSV handles the harder structural direction. With the flatten option on, nested objects are flattened using a configurable separator (default dot): `{"address": {"city": "Portland""zip": "97201"}}` becomes columns `address.city` and `address.zip`. Non-object values such as arrays are serialized to a JSON string within the cell. The same separator is used when "create nested objects" is enabled on the CSV-to-JSON side, so a header like `address.city` rebuilds the nested object.
The CSV field delimiter is detected automatically by the underlying PapaParse parser, so comma, tab, semicolon, and pipe files all load without manual configuration. The configurable separator in the options panel controls dot-notation nesting, not the CSV column delimiter.
Convert exported spreadsheets into the JSON payloads your REST endpoints expect.
Turn CSV files into JSON documents ready for MongoDB or other document stores.
Generate JSON data files that React, Vue, or Angular apps can import directly.
With the flatten option enabled, nested keys are joined with a separator you choose (dot by default), so "address.city" becomes its own column. Array and other non-scalar values are written as a JSON string inside the cell.
Turn the header option off and the CSV-to-JSON output becomes an array of arrays (one inner array per row), with an optional leading row index.
Yes. The converter recognizes numeric strings, booleans, and null values and outputs them as proper JSON types rather than quoted strings.
Rows and columns are parsed and transformed in memory in your browser. No record ever reaches a server.