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. Most CSV-to-JSON conversions produce an array of objects where each row is an object keyed by the column headers; this is the shape most tools expect and the default here. 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 should become null rather than empty strings in most applications. The converter detects these patterns and emits proper JSON types, with an opt-out when you specifically want everything as strings. Numeric strings that start with leading zeros ("007") are a special case, they parse as numbers by default but can be preserved as strings via a pattern that marks certain columns as "string only." Phone numbers, postal codes, and barcodes are the common cases where numeric-looking strings must stay strings.
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. Most CSV-to-JSON conversions produce an array of objects where each row is an object keyed by the column headers; this is the shape most tools expect and the default here. 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 should become null rather than empty strings in most applications. The converter detects these patterns and emits proper JSON types, with an opt-out when you specifically want everything as strings. Numeric strings that start with leading zeros ("007") are a special case, they parse as numbers by default but can be preserved as strings via a pattern that marks certain columns as "string only." Phone numbers, postal codes, and barcodes are the common cases where numeric-looking strings must stay strings.
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.
CSV-to-JSON output formats each have tradeoffs. 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 for every row, which matters at scale: a 100,000-row CSV with 20 columns produces a JSON file roughly 3-5x the size of the source CSV because of key repetition. Array-of-arrays (`[["Alice"30], ["Bob"25], ...]`) is compact and JSON-native but loses the header names unless you keep them as the first row, which many consuming tools then have to special-case. JSON Lines (NDJSON), one JSON object per line, is the right choice for streaming or very large exports; it is trivial to process line-by-line rather than requiring the whole file in memory.
JSON-to-CSV has the harder structural problem because JSON can contain things CSV cannot express. Nested objects get flattened using dot notation: `{"address": {"city": "Portland""zip": "97201"}}` becomes two columns `address.city,address.zip`. Arrays inside objects become either delimited strings in a single cell (`tags="red,blue,green"` with some sub-delimiter, usually semicolon or pipe), or they get expanded into multiple rows which duplicates the non-array fields. Which approach is right depends on the downstream consumer: databases and spreadsheets typically want the expanded-rows form, while text analytics tools want the delimited-string form. The converter lets you choose.
Delimiters matter beyond the CSV/TSV distinction. Semicolon is the default in European locales because the comma is used as the decimal separator. Tab-separated is common for data export from database tools because tabs almost never appear in data fields. Pipe-separated shows up in logging and legacy formats because pipes are rare in user data. The converter auto-detects the delimiter by scanning the first few lines and counting candidate characters; it picks whichever appears consistently the same number of times per line, which is correct for almost all real-world files. For edge cases where detection is wrong (very short files, files with mixed delimiters), you can override manually.
Nested keys are joined with dot notation (e.g., "address.city"), and arrays are serialized as delimited strings.
Toggle the header option off and the tool generates numeric keys (0, 1, 2, …) for each column.
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.