Die JSON-Ausgabe
Die Konvertierung der Beispiel-CSV ergibt:
[
{
"name": "Alice Chen",
"email": "alice@example.com",
"role": "admin",
"active": true
},
{
"name": "Bob Martinez",
"email": "bob@example.com",
"role": "editor",
"active": true
},
{
"name": "Carol Williams",
"email": "carol@example.com",
"role": "viewer",
"active": false
}
]
CSV-Parsing-Regeln (RFC 4180)
- Felder werden durch Kommas getrennt
- Jeder Datensatz endet mit CRLF (
\r\n), aber die meisten Parser akzeptieren auch LF (\n) - Felder können in doppelte Anführungszeichen gesetzt werden; wenn ja, wird das doppelte Anführungszeichen darin durch Verdopplung maskiert (
"") - Der erste Datensatz kann eine Kopfzeile mit Spaltennamen sein
- Alle Datensätze müssen dieselbe Anzahl von Feldern haben
Ein CSV, das mit Anführungszeichen und eingebetteten Kommas umgeht:
id,description,tags
1,"Converts JSON, YAML, and CSV","data,tools"
2,"Supports ""quoted"" values","parsing"
Typinferenz
CSV-Felder sind auf Formatebene immer Strings. Ein Konverter, der typisiertes JSON erzeugt, wendet Inferenz an:
"42" -> 42 (gültige Ganzzahl)
"3.14" -> 3.14 (gültiger Float)
"true" -> true (boolescher Wert)
"false" -> false (boolescher Wert)
"" -> null (leeres Feld)
"hello" -> hello (bleibt String)
Das führt zu falschen Ergebnissen bei:
- Postleitzahlen und Telefonnummern mit führenden Nullen (07302 wird zu 7302)
- Großen Ganzzahlen außerhalb des sicheren JavaScript-Bereichs (Präzisionsverlust über 2^53)
- Wissenschaftlichen Notationen, die du als Strings behalten möchtest (1e5 wird zu 100000)
CLI-Alternativen
csvjson (Teil von csvkit)
pip install csvkit
csvjson data.csv > data.json
Python-Standardbibliothek
import csv
import json
with open(data.csv) as f:
reader = csv.DictReader(f)
data = [row for row in reader]
with open(data.json, w) as f:
json.dump(data, f, indent=2)