Converting CSV to JSON is a daily task for Python developers — loading data, transforming it for APIs, or feeding machine learning pipelines. Here are the three best methods ranked by use case.

Method 1: csv.DictReader (built-in, no dependencies)

The standard library solution — no pip install needed:

import csv
import json

def csv_to_json(csv_filepath, json_filepath=None):
    result = []

    with open(csv_filepath, 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        for row in reader:
            result.append(dict(row))

    json_str = json.dumps(result, indent=2)

    if json_filepath:
        with open(json_filepath, 'w', encoding='utf-8') as f:
            f.write(json_str)

    return json_str

# Usage
data = csv_to_json('input.csv', 'output.json')
print(data)

Method 2: pandas (best for data science & large files)

import pandas as pd

# Basic conversion
df = pd.read_csv('data.csv')
df.to_json('output.json', orient='records', indent=2)

# With type control
df = pd.read_csv('data.csv', dtype={'age': int, 'score': float})
json_str = df.to_json(orient='records')

# orient options:
# 'records'  -> [{"col": val}, ...] — most common for APIs
# 'index'    -> {0: {"col": val}, ...}
# 'columns'  -> {"col": [val, ...]}
# 'values'   -> [[val, val], ...]

# From a CSV string (no file needed)
import io
csv_string = "name,age
Alice,28
Bob,34"
df = pd.read_csv(io.StringIO(csv_string))
json_output = df.to_json(orient='records', indent=2)
print(json_output)

Method 3: Handle type conversion manually

CSV files store everything as strings. If you need proper types (integers, booleans) in JSON:

import csv, json

def auto_type(value):
    if value.lower() == 'true': return True
    if value.lower() == 'false': return False
    if value == '' or value.lower() == 'null': return None
    try: return int(value)
    except ValueError: pass
    try: return float(value)
    except ValueError: pass
    return value

def csv_to_json_typed(csv_filepath):
    result = []
    with open(csv_filepath, 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        for row in reader:
            typed_row = {k: auto_type(v) for k, v in row.items()}
            result.append(typed_row)
    return result

data = csv_to_json_typed('input.csv')
print(json.dumps(data, indent=2))
# Numbers are actual numbers, booleans are actual booleans

Convert CSV from a URL to JSON

import requests, csv, json, io

url = 'https://example.com/data.csv'
response = requests.get(url)
response.raise_for_status()

reader = csv.DictReader(io.StringIO(response.text))
data = [dict(row) for row in reader]

print(json.dumps(data[:3], indent=2))  # first 3 rows

Handle CSV with different delimiters

import csv, json

# Semicolon-separated (common in European CSVs)
with open('data.csv', 'r') as f:
    reader = csv.DictReader(f, delimiter=';')
    data = [dict(row) for row in reader]

# Tab-separated (TSV)
with open('data.tsv', 'r') as f:
    reader = csv.DictReader(f, delimiter='	')
    data = [dict(row) for row in reader]

Try it free — CSV to JSON Converter

Convert CSV to JSON instantly in your browser — no Python needed for quick conversions.

Open tool →