Convert CSV to JSON

Paste CSV data, or drop a .csv file, and download it as a JSON array. Every value stays a string, matching the CSV’s own text - nothing is guessed at.

Convert CSV to JSON

Drop your CSV file here

Up to 20MB per file. Stays on this device.

Nothing is sent anywhere. Turn off your Wi-Fi and this page still works - try it.

How it works

  1. Drop or choose a .csv file, or paste CSV text directly into the text box.
  2. Review the preview - every row becomes one JSON object, keyed by the header row.
  3. Download the result as a JSON file.
Example output

Input

sku,name,price
A100,Widget,9.5
A101,Gadget,14
A102,Gizmo,21.75

Output

[
  {
    "sku": "A100",
    "name": "Widget",
    "price": "9.5"
  },
  {
    "sku": "A101",
    "name": "Gadget",
    "price": "14"
  },
  {
    "sku": "A102",
    "name": "Gizmo",
    "price": "21.75"
  }
]

A 3-row CSV converted into a 3-object JSON array. Every value stays a string.

Frequently asked questions

Is my CSV sent anywhere?

No. Pasted CSV and uploaded files are both read and converted entirely on your device - nothing is sent to a server. Turn off your Wi-Fi after the page loads and it still works. This page loads 10KB of JavaScript, gzipped - about what your browser's network tab will show for this page's own scripts.

What CSV shape does this expect?

A header row followed by one or more data rows, comma-separated, with double-quoted fields for any value containing a comma, quote, or line break (standard RFC 4180 CSV) - the same shape every spreadsheet program exports by default.

Are numbers and true/false converted to real JSON types?

No, deliberately - every value stays a JSON string, exactly as it appeared in the CSV. CSV itself carries no type information, so guessing at a "real" type risks silently corrupting a value that only looks numeric, like a leading-zero code (0042 becoming 42) or a phone number. If you need typed values, use Excel to JSON instead, which reads real cell types from a genuine spreadsheet file.

What happens to a blank or repeated column header?

A blank header cell becomes column_N (its 1-indexed position); a repeated header name gets a trailing _2, _3, and so on - so every JSON key is always unique and non-empty, and no column silently overwrites another.

What if a row has more or fewer fields than the header?

A short row gets an empty string for its missing trailing fields; a long row has its extra trailing fields dropped. No column ever shifts out of place because of a ragged row.

Files are processed locally in your browser and never uploaded. Read more on the privacy page.