CSV zu JSON Konvertierung ist eine der haufigsten Datentransformationsaufgaben fur Entwickler. Ob Sie Daten zwischen Systemen migrieren, APIs erstellen oder Tabellen verarbeiten, die effiziente Konvertierung von CSV zu JSON ist unerlasslich. Dieser umfassende Leitfaden behandelt Konvertierungswerkzeuge, Parsing-Algorithmen, Codebeispiele in JavaScript, Python und Bash sowie Best Practices.
Testen Sie unser kostenloses Online CSV zu JSON Konvertierungstool.
Was ist CSV?
CSV steht fur Comma-Separated Values, ein durch RFC 4180 definiertes Klartextformat zur Speicherung tabellarischer Daten. Jede Zeile reprasentiert einen Datensatz, Werte werden durch Kommas oder andere Trennzeichen getrennt. Die erste Zeile dient typischerweise als Kopfzeile.
Das CSV-Format wird seit den Anfangen der Informatik verwendet und bleibt wegen seiner Einfachheit beliebt. Jeder Texteditor, jede Tabellenanwendung oder Programmiersprache kann CSV lesen und schreiben. Trotz der Einfachheit muss ein CSV-Parser mehrere knifflige Falle behandeln.
Wann CSV oder JSON verwenden: CSV eignet sich fur flache Tabellendaten wie Tabellenexporte und Datenbankdumps. JSON ist besser fur hierarchische Datenstrukturen, API-Antworten und Konfigurationsdateien.
CSV vs JSON: Detaillierter Vergleich
Die Unterschiede zwischen CSV und JSON zu verstehen hilft bei der Formatwahl und beim Verstandnis des Konvertierungsprozesses:
| Merkmal | CSV | JSON |
|---|---|---|
| Struktur | Flach, tabellarisch | Hierarchisch (verschachtelte Objekte) |
| Lesbarkeit | Einfach fur simple Daten | Lesbar mit Formatierung |
| Verschachtelung | Nicht nativ unterstutzt | Vollstandig unterstutzt |
| Datentypen | Alles ist String | Strings, Zahlen, Booleans, null, Arrays, Objekte |
| Dateigrosse | Generell kleiner | Grosser (Schlussel wiederholt) |
| Anwendungsfalle | Tabellen, DB-Exporte, Data Science | APIs, Config, NoSQL, Web-Apps |
Wie die CSV zu JSON Konvertierung funktioniert
Der CSV zu JSON Konverter Prozess umfasst mehrere Schritte:
- Kopfzeile lesen: Spaltennamen extrahieren, die zu JSON-Schlusseln werden.
- Jede Datenzeile parsen: Nach Trennzeichen aufteilen und Werte den Kopfzeilen zuordnen.
- Zitierte Felder behandeln: In Anfuhrungszeichen eingeschlossene Werte bilden ein Feld.
- Datentypen erkennen: Zahlen, Booleans und Null-Werte automatisch konvertieren.
- JSON-Array erstellen: Jede Zeile wird ein Objekt, alle in einem Array gesammelt.
Beispiel: CSV name,age,active\nAlice,30,true ergibt [{"name":"Alice","age":30,"active":true}].
CSV zu JSON Codebeispiele
JavaScript: CSV zu JSON
Mehrere Ansatze fur CSV zu JSON JavaScript Konvertierung: nativ, Papa Parse und csv-parser fur Node.js:
// ===== Native JavaScript: CSV to JSON =====
function csvToJson(csv) {
const lines = csv.trim().split('\n');
const headers = lines[0].split(',').map(h => h.trim());
const result = [];
for (let i = 1; i < lines.length; i++) {
const values = lines[i].split(',');
const obj = {};
headers.forEach((header, index) => {
let val = values[index]?.trim() || '';
// Auto-detect types
if (val === 'true') val = true;
else if (val === 'false') val = false;
else if (val === 'null' || val === '') val = null;
else if (!isNaN(val) && val !== '') val = Number(val);
obj[header] = val;
});
result.push(obj);
}
return result;
}
const csv = `name,age,city,active
Alice,30,New York,true
Bob,25,London,false
Charlie,35,Tokyo,true`;
console.log(JSON.stringify(csvToJson(csv), null, 2));
// [
// { "name": "Alice", "age": 30, "city": "New York", "active": true },
// { "name": "Bob", "age": 25, "city": "London", "active": false },
// { "name": "Charlie", "age": 35, "city": "Tokyo", "active": true }
// ]
// ===== Papa Parse (Browser & Node.js) =====
// npm install papaparse
import Papa from 'papaparse';
// Parse CSV string
const result = Papa.parse(csvString, {
header: true, // Use first row as keys
dynamicTyping: true, // Auto-detect numbers and booleans
skipEmptyLines: true, // Ignore blank lines
});
console.log(result.data); // Array of JSON objects
console.log(result.errors); // Any parsing errors
console.log(result.meta); // Metadata (delimiter, fields, etc.)
// Parse CSV file (browser)
const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', (e) => {
Papa.parse(e.target.files[0], {
header: true,
dynamicTyping: true,
complete: (results) => {
console.log(results.data); // JSON array
},
});
});
// ===== Node.js: csv-parser (streaming) =====
// npm install csv-parser
const csvParser = require('csv-parser');
const fs = require('fs');
const results = [];
fs.createReadStream('data.csv')
.pipe(csvParser())
.on('data', (row) => results.push(row))
.on('end', () => {
console.log(JSON.stringify(results, null, 2));
});Python: CSV zu JSON
CSV zu JSON Python mit dem csv-Modul, pandas oder json.dumps:
# ===== Python csv module =====
import csv
import json
# CSV string to JSON
csv_string = """name,age,city,active
Alice,30,New York,true
Bob,25,London,false"""
reader = csv.DictReader(csv_string.strip().splitlines())
data = list(reader)
json_output = json.dumps(data, indent=2)
print(json_output)
# CSV file to JSON file
with open('input.csv', 'r', encoding='utf-8') as csv_file:
reader = csv.DictReader(csv_file)
data = list(reader)
with open('output.json', 'w', encoding='utf-8') as json_file:
json.dump(data, json_file, indent=2, ensure_ascii=False)
# ===== pandas (recommended for large datasets) =====
import pandas as pd
# CSV to JSON with pandas
df = pd.read_csv('data.csv')
# Different JSON orientations
print(df.to_json(orient='records', indent=2)) # Array of objects
print(df.to_json(orient='columns', indent=2)) # Object of arrays
print(df.to_json(orient='index', indent=2)) # Object keyed by index
# With type conversion
df['age'] = pd.to_numeric(df['age'], errors='coerce')
df['active'] = df['active'].map({'true': True, 'false': False})
# Save to file
df.to_json('output.json', orient='records', indent=2, force_ascii=False)
# ===== Streaming large CSV files =====
import csv
import json
def csv_to_json_stream(csv_path, json_path, chunk_size=1000):
"""Convert large CSV to JSON using streaming."""
with open(json_path, 'w') as out:
out.write('[\n')
with open(csv_path, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
first = True
for row in reader:
if not first:
out.write(',\n')
json.dump(row, out, ensure_ascii=False)
first = False
out.write('\n]')
csv_to_json_stream('large_file.csv', 'output.json')Bash / Kommandozeile: CSV zu JSON
Kommandozeilen-Konvertierung mit csvkit, miller, jq und awk:
# ===== csvkit: csvjson command =====
# pip install csvkit
# Basic CSV to JSON conversion
csvjson data.csv > output.json
# Indent output for readability
csvjson --indent 2 data.csv > output.json
# Specify a key column (creates object instead of array)
csvjson --key id data.csv > output.json
# ===== miller (mlr): powerful data processing =====
# brew install miller (macOS) or apt install miller (Linux)
# CSV to JSON
mlr --icsv --ojson cat data.csv > output.json
# CSV to JSON with filtering
mlr --icsv --ojson filter '$age > 25' data.csv
# CSV to JSON with field selection
mlr --icsv --ojson cut -f name,city data.csv
# ===== jq + awk: lightweight approach =====
# Convert simple CSV to JSON with awk
awk -F',' 'NR==1{split($0,h);next}
{printf "{";for(i=1;i<=NF;i++)
printf "%s\"%s\":\"%s\"",
(i>1?",":""),h[i],$i;print "}"}' data.csv | jq -s '.'
# ===== Using sed + jq for quick conversion =====
# Convert CSV to JSON (simple, no quoted fields)
head -1 data.csv | tr ',' '\n' > /tmp/headers.txt
tail -n +2 data.csv | while IFS=',' read -r col1 col2 col3; do
jq -n --arg a "$col1" --arg b "$col2" --arg c "$col3" \
'{name:$a, age:($b|tonumber), city:$c}'
done | jq -s '.'Dedizierte CLI-Tools: csvjson und miller
csvjson (csvkit) und miller (mlr) sind spezialisierte Kommandozeilentools fur Datenformatkonvertierung:
# ===== csvkit: full suite of CSV tools =====
# pip install csvkit
# View CSV statistics
csvstat data.csv
# Convert CSV to JSON
csvjson data.csv
# Convert Excel to CSV first, then to JSON
in2csv data.xlsx | csvjson > output.json
# Query CSV with SQL syntax, output as JSON
csvsql --query "SELECT name, age FROM data WHERE age > 25" data.csv | csvjson
# ===== miller (mlr): Swiss Army knife for data =====
# CSV to JSON (pretty-printed)
mlr --icsv --ojson --jflatsep '.' cat data.csv
# CSV to JSON with data transformation
mlr --icsv --ojson put '$full_name = $first . " " . $last' data.csv
# CSV to NDJSON (newline-delimited JSON, one object per line)
mlr --icsv --ojsonl cat data.csv
# Convert between any formats
mlr --icsv --ojson cat data.csv # CSV -> JSON
mlr --ijson --ocsv cat data.json # JSON -> CSV
mlr --icsv --otsv cat data.csv # CSV -> TSV
mlr --itsv --ojson cat data.tsv # TSV -> JSONJSON zu CSV Konvertierung (Umkehrprozess)
Der umgekehrte Prozess, JSON zu CSV, beinhaltet das Flachmachen hierarchischer JSON-Daten in eine tabellarische Struktur.
Verschachtelte Objekte flachmachen: Verschachtelte Objekte werden mit Punkt-Notation oder Unterstrichen flachgemacht: user.name, user.address.city.
Beispiele fur JSON zu CSV Konvertierung in JavaScript und Python:
// ===== JavaScript: JSON to CSV =====
function jsonToCsv(jsonArray) {
if (!jsonArray.length) return '';
// Flatten nested objects
function flatten(obj, prefix = '') {
return Object.keys(obj).reduce((acc, key) => {
const fullKey = prefix ? prefix + '.' + key : key;
if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) {
Object.assign(acc, flatten(obj[key], fullKey));
} else if (Array.isArray(obj[key])) {
acc[fullKey] = obj[key].join('|'); // Join arrays with pipe
} else {
acc[fullKey] = obj[key];
}
return acc;
}, {});
}
const flatData = jsonArray.map(item => flatten(item));
const headers = [...new Set(flatData.flatMap(Object.keys))];
const csvRows = [headers.join(',')];
for (const row of flatData) {
const values = headers.map(h => {
const val = row[h] ?? '';
// Quote values containing commas, quotes, or newlines
const str = String(val);
return str.includes(',') || str.includes('"') || str.includes('\n')
? '"' + str.replace(/"/g, '""') + '"'
: str;
});
csvRows.push(values.join(','));
}
return csvRows.join('\n');
}
// Example with nested JSON
const data = [
{ name: "Alice", address: { city: "NYC", zip: "10001" }, tags: ["dev", "admin"] },
{ name: "Bob", address: { city: "London", zip: "EC1A" }, tags: ["user"] },
];
console.log(jsonToCsv(data));
// name,address.city,address.zip,tags
// Alice,NYC,10001,dev|admin
// Bob,London,EC1A,user# ===== Python: JSON to CSV =====
import json
import csv
import pandas as pd
# Method 1: pandas (easiest)
with open('data.json') as f:
data = json.load(f)
df = pd.json_normalize(data, sep='.') # Flatten nested objects
df.to_csv('output.csv', index=False)
# Method 2: csv module (manual control)
def json_to_csv(json_data, csv_path):
"""Convert JSON array to CSV, handling nested objects."""
flat_data = [flatten_dict(item) for item in json_data]
fieldnames = list(dict.fromkeys(
key for item in flat_data for key in item.keys()
))
with open(csv_path, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(flat_data)
def flatten_dict(d, parent_key='', sep='.'):
items = []
for k, v in d.items():
new_key = f"{parent_key}{sep}{k}" if parent_key else k
if isinstance(v, dict):
items.extend(flatten_dict(v, new_key, sep).items())
elif isinstance(v, list):
items.append((new_key, '|'.join(str(i) for i in v)))
else:
items.append((new_key, v))
return dict(items)Behandlung von Randfallen beim CSV-Parsing
Ein robuster CSV-Parser muss zahlreiche Randfalle behandeln:
UTF-8 BOM: Manche Anwendungen stellen ein unsichtbares BOM-Zeichen voran. Ihr Parser sollte es entfernen.
Trennzeichen-Variationen: Semikolon in Europa, Tab fur TSV. Ein guter Parser erkennt das Trennzeichen automatisch.
Fehlende Werte: Nachgestellte Kommas oder leere Felder in der Mitte. Der Parser sollte sie als leere Strings oder null beibehalten.
Mehrzeilige Felder: RFC 4180 erlaubt Werte uber mehrere Zeilen in Anfuhrungszeichen.
Sonderzeichen und Escaping: Anfuhrungszeichen in zitierten Feldern werden durch Verdoppelung escaped.
Inkonsistente Zeilenlangen: Ein robuster Parser sollte kurze Zeilen auffĂŒllen oder lange abschneiden.
// Robust CSV parser handling all edge cases
function parseCSV(text, delimiter = ',') {
// Strip UTF-8 BOM if present
if (text.charCodeAt(0) === 0xFEFF) {
text = text.slice(1);
}
const rows = [];
let row = [];
let field = '';
let inQuotes = false;
for (let i = 0; i < text.length; i++) {
const char = text[i];
const next = text[i + 1];
if (inQuotes) {
if (char === '"' && next === '"') {
field += '"'; // Escaped quote
i++; // Skip next quote
} else if (char === '"') {
inQuotes = false; // End of quoted field
} else {
field += char; // Regular char inside quotes
}
} else {
if (char === '"') {
inQuotes = true; // Start quoted field
} else if (char === delimiter) {
row.push(field);
field = '';
} else if (char === '\n' || (char === '\r' && next === '\n')) {
row.push(field);
rows.push(row);
row = [];
field = '';
if (char === '\r') i++; // Skip \n in \r\n
} else {
field += char;
}
}
}
// Push last field and row
if (field || row.length) {
row.push(field);
rows.push(row);
}
return rows;
}CSV Best Practices
Befolgen Sie diese Best Practices fur maximale Kompatibilitat:
Immer UTF-8 verwenden: Der universelle Standard fur Textcodierung.
Felder konsistent zitieren: Am sichersten ist es, alle Felder zu zitieren.
Kopfzeile einschliessen: Immer mit beschreibenden Namen und konsistenten Namenskonventionen.
Konsistente Trennzeichen verwenden: Ein Trennzeichen fur die gesamte Datei.
Grosse Dateien streamen: Streaming-Parser fur Dateien grosser als der verfugbare Speicher.
Daten nach Konvertierung validieren: Datensatzanzahl, Datentypen und Integritat prufen.
Haufig gestellte Fragen
Wie konvertiert man CSV zu JSON?
Parsen Sie die Kopfzeile fur Spaltennamen, dann mappen Sie jede Zeile auf die entsprechenden Schlussel. Verwenden Sie Bibliotheken wie Papa Parse (JavaScript) oder pandas (Python), oder unser kostenloses Online-Tool.
Was ist der Unterschied zwischen CSV und JSON?
CSV ist ein flaches Tabellenformat, alle Werte sind Strings. JSON ist hierarchisch mit Unterstutzung fur verschachtelte Objekte, Arrays und mehrere Datentypen. CSV ist kompakter, JSON ausdrucksstarker.
Kann CSV verschachtelte Daten verarbeiten?
Nein, CSV unterstutzt nativ keine verschachtelten Strukturen. Man muss Daten flachmachen mit Punkt-Notation, JSON-Codierung in CSV-Feldern oder separaten CSV-Dateien.
Die CSV zu JSON Konvertierung ist eine grundlegende Fahigkeit fur Entwickler und Datenanalysten. Nutzen Sie unser kostenloses Tool fur sofortige Konvertierungen.
CSV und JSON sofort konvertieren mit unserem kostenlosen Online-Tool.