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.