Home / Blog / Transliteration & conversion

Spreadsheet formats & CSV

How To Convert CSV Data To JSON?

CSV data becomes JSON by parsing the header and records, then mapping each record to an object.

How To Convert CSV Data To JSON?

CSV data becomes JSON by parsing the header and records, then mapping each record to an object. Preserve text identifiers and decide which columns become numbers, booleans or nulls. The standard-library example below keeps all CSV fields as strings.

Set up the conversion

Open the CSV with newline="" so the CSV parser controls embedded newlines, and choose its actual encoding. The example assumes UTF-8 with an optional byte-order mark and a header row. Reject duplicate or empty header names before converting; otherwise a dictionary can lose distinct columns. Reject records wider than the header instead of dropping their extra fields.

A reproducible conversion example

import csv, json

with open("input.csv", encoding="utf-8-sig", newline="") as source:
    reader = csv.DictReader(source)
    fields = reader.fieldnames
    if not fields or any(not name for name in fields) or len(set(fields)) != len(fields):
        raise ValueError("CSV needs unique nonempty headers")
    rows = list(reader)
    if any(None in row or any(v is None for v in row.values()) for row in rows):
        raise ValueError("A record has the wrong number of fields")
with open("output.json", "w", encoding="utf-8") as target:
    json.dump(rows, target, ensure_ascii=False, indent=2)

The code is an illustrative conversion core. Run it in an isolated working folder with the named test files, install only the dependencies used by the example, and handle its reported errors before applying it to a larger dataset. It does not contact a remote conversion service.

Check the expected result

For id,name followed by 00123,"Lee, Ana", expect an object with the string id equal to 00123 and the name equal to Lee, Ana. An empty CSV cell becomes an empty string under this contract, not JSON null. If a quantity must be numeric, convert only that field and reject invalid values. Compare the number of JSON objects with the number of parsed data records, not the physical line count, because quoted fields may span lines.

Format-specific limits

A JSON array requires holding these rows in memory in this simple example. For large inputs, stream a properly delimited array or choose newline-delimited JSON when the recipient supports it. Neither approach infers nested objects from dotted header names automatically. Define the output schema before changing names or types.

Verify the file contract before using the result

Write down the delimiter, encoding, header names, field order and treatment of empty values. Keep the original file unchanged and write the converted output to a different path. Conversion is successful when a parser for the destination format recovers the intended values; a familiar filename extension or a successful save message is not enough.

Start with a small fixture that contains the cases your real data can contain. Include a leading-zero identifier, a quoted comma, an embedded quotation mark, a blank field and a non-ASCII character. Add a multiline field only if both formats and the receiving system support it. Verify the fixture first, then run a bounded sample from the real input. Record parsed row counts and check the first and last records so truncation or an accidental duplicate header is visible.

Keep identifiers separate from quantities. An account-like or product identifier may contain digits while still being text; converting it to a floating-point number can remove leading zeros or precision. Dates also need an agreed format. When a conversion produces an unexpected blank, investigate whether it came from an empty source cell, a missing field, an invalid value or an automatic missing-value rule. Those conditions can require different downstream handling.

Do not resolve malformed records by silently skipping them unless that behavior is an explicit requirement and the skipped records are reported. Use a failure message that identifies the record or field, retain enough context to correct the input, and avoid exposing sensitive contents in public logs. For production automation, write to a temporary destination and promote it only after validation so a failed run cannot replace a previously good export.

Where the browser tool fits

Convert Text to CSV helps with already extracted plain text. It does not replace a workbook reader, a JSON parser, an XML schema validator or a Parquet engine. Use it only when its input structure and delimiter choices match your actual data. For structured source files, perform the format-aware conversion above and check the result with an independent reader.

Primary reference

Official format and API documentation