JSONL in Python: Lesen, Schreiben & Parsen
Eine vollständige Anleitung zur Arbeit mit JSONL (JSON Lines)-Dateien in Python. Lernen Sie das Lesen, Schreiben, Parsen und Streamen von JSONL-Daten mit integrierten Modulen, pandas und Hochleistungsbibliotheken.
Letzte Aktualisierung: Februar 2026
Warum Python für JSONL?
Python ist die beliebteste Sprache für die Arbeit mit JSONL-Dateien, und das aus gutem Grund. Das integrierte json-Modul verarbeitet JSON-Parsing von Haus aus, die Datei-Iteration ist standardmäßig speichereffizient, und das Ökosystem bietet leistungsstarke Bibliotheken wie pandas und orjson für spezialisierte Workflows. Ob Sie Machine-Learning-Datensätze, Anwendungsprotokolle oder API-Antworten verarbeiten — Python macht die JSONL-Verarbeitung unkompliziert.
JSONL (JSON Lines) speichert ein JSON-Objekt pro Zeile und ist damit ideal für Streaming, Append-Only-Protokollierung und die Verarbeitung großer Datensätze, ohne alles in den Speicher laden zu müssen. Pythons zeilenweises Lesen von Dateien passt perfekt zu diesem Format. In dieser Anleitung lernen Sie drei Ansätze zum Lesen von JSONL, zwei Ansätze zum Schreiben und den Umgang mit Dateien, die zu groß für den Arbeitsspeicher sind.
JSONL-Dateien in Python lesen
Es gibt mehrere Möglichkeiten, JSONL-Dateien in Python zu lesen, die jeweils für verschiedene Anwendungsfälle geeignet sind. Das Standard-json-Modul funktioniert für die meisten Szenarien, pandas ist praktisch für tabellarische Analysen, und Generatoren eignen sich am besten für große Dateien.
Der einfachste Ansatz verwendet Pythons integriertes json-Modul. Öffnen Sie die Datei, iterieren Sie zeilenweise und parsen Sie jede Zeile mit json.loads(). Dadurch werden alle Datensätze in eine Liste im Speicher geladen.
import jsonrecords = []with open('data.jsonl', 'r', encoding='utf-8') as f:for line in f:line = line.strip()if line: # Skip empty linesrecords.append(json.loads(line))print(f'Loaded {len(records)} records')print(records[0])
Wenn Ihre JSONL-Daten tabellarisch sind (gleiche Schlüssel in jedem Datensatz), kann pandas sie direkt mit einem einzigen Funktionsaufruf in einen DataFrame einlesen. Dies ist der schnellste Weg, um mit der Analyse strukturierter JSONL-Daten zu beginnen.
import pandas as pd# Read entire file into a DataFramedf = pd.read_json('data.jsonl', lines=True)print(df.head())print(f'Shape: {df.shape}')# For large files, read in chunkschunks = pd.read_json('large.jsonl', lines=True, chunksize=10000)for chunk in chunks:# Process each chunk (DataFrame)print(f'Chunk shape: {chunk.shape}')
Für Dateien, die zu groß für den Arbeitsspeicher sind, verwenden Sie eine Generator-Funktion. Diese gibt jeweils einen Datensatz zurück und hält den Speicherverbrauch konstant, unabhängig von der Dateigröße. Dies ist das empfohlene Muster für produktive Datenpipelines.
import jsonfrom typing import Iterator, Anydef read_jsonl(path: str) -> Iterator[dict[str, Any]]:"""Read a JSONL file lazily, yielding one record at a time."""with open(path, 'r', encoding='utf-8') as f:for line_num, line in enumerate(f, 1):line = line.strip()if not line:continuetry:yield json.loads(line)except json.JSONDecodeError as e:print(f'Skipping invalid JSON at line {line_num}: {e}')# Process records one at a timefor record in read_jsonl('large_data.jsonl'):process(record) # Only one record in memory at a time
JSONL-Dateien in Python schreiben
Das Schreiben von JSONL-Dateien ist unkompliziert: Serialisieren Sie jeden Datensatz als JSON-String und hängen Sie ein Zeilenumbruchzeichen an. Die Schlüsselregel lautet: ein JSON-Objekt pro Zeile, ohne nachgestellte Kommas oder umschließendes Array.
Verwenden Sie json.dumps() zur Serialisierung jedes Datensatzes und schreiben Sie ihn gefolgt von einem Zeilenumbruch. Setzen Sie ensure_ascii=False, um Unicode-Zeichen wie Chinesisch, Japanisch oder Emoji in der Ausgabe beizubehalten.
import jsonrecords = [{"id": 1, "name": "Alice", "age": 30},{"id": 2, "name": "Bob", "age": 25},{"id": 3, "name": "Charlie", "age": 35},]with open('output.jsonl', 'w', encoding='utf-8') as f:for record in records:f.write(json.dumps(record, ensure_ascii=False) + '\n')print(f'Wrote {len(records)} records to output.jsonl')
Wenn Ihre Daten bereits in einem pandas DataFrame vorliegen, verwenden Sie to_json() mit orient='records' und lines=True, um sie direkt als JSONL zu exportieren. Dies ist die Umkehrung von pd.read_json() mit lines=True.
import pandas as pddf = pd.DataFrame([{"id": 1, "name": "Alice", "age": 30},{"id": 2, "name": "Bob", "age": 25},{"id": 3, "name": "Charlie", "age": 35},])# Write DataFrame to JSONLdf.to_json('output.jsonl', orient='records', lines=True, force_ascii=False)print(f'Wrote {len(df)} records to output.jsonl')
Python-Bibliotheken für JSONL
Python bietet mehrere JSON-Parsing-Bibliotheken mit unterschiedlichen Leistungsmerkmalen. Die Wahl der richtigen hängt von Ihrer Dateigröße und den Leistungsanforderungen ab.
json (stdlib)
IntegriertPythons integriertes json-Modul erfordert keine Installation und funktioniert überall. Es ist für die meisten JSONL-Workloads ausreichend und unterstützt alle Standard-JSON-Typen. Die Leistung ist für Dateien bis zu einigen hundert MB angemessen.
orjson
Schnellsteorjson ist die schnellste Python-JSON-Bibliothek, geschrieben in Rust. Sie bietet 2–10x schnelleres Parsen und Serialisieren im Vergleich zum Standard-json-Modul. Sie gibt Bytes statt Strings aus und unterstützt nativ Dataclasses, datetime, numpy und UUID-Typen.
ujson
Schnellujson (UltraJSON) ist eine C-basierte JSON-Bibliothek, die 2–5x schneller als das Standard-json-Modul ist. Ihre API ist nahezu identisch mit dem integrierten json-Modul, was sie zu einem Drop-in-Ersatz macht. Ein guter Kompromiss zwischen Kompatibilität und Geschwindigkeit.
Große JSONL-Dateien streamen
Bei der Verarbeitung von JSONL-Dateien im Gigabyte-Bereich benötigen Sie einen Streaming-Ansatz, der Daten in Stapeln liest, transformiert und schreibt. Dies hält den Speicherverbrauch konstant und ermöglicht die Fortschrittsüberwachung.
import jsonimport sysdef process_large_jsonl(input_path: str,output_path: str,batch_size: int = 1000) -> int:"""Stream-process a large JSONL file in batches."""processed = 0batch: list[dict] = []with open(input_path, 'r') as fin, \open(output_path, 'w') as fout:for line in fin:line = line.strip()if not line:continuerecord = json.loads(line)# Transform the recordrecord['processed'] = Truebatch.append(record)if len(batch) >= batch_size:for r in batch:fout.write(json.dumps(r) + '\n')processed += len(batch)batch.clear()print(f'\rProcessed {processed} records...', end='')# Write remaining recordsfor r in batch:fout.write(json.dumps(r) + '\n')processed += len(batch)print(f'\nDone. Processed {processed} records total.')return processed# Usageprocess_large_jsonl('input.jsonl', 'output.jsonl', batch_size=5000)
Dieses Muster verwendet konstanten Speicher, indem Datensätze in Stapeln fester Größe verarbeitet werden. Der Parameter batch_size steuert den Kompromiss zwischen Speicherverbrauch und I/O-Effizienz. Für die meisten Systeme funktionieren Stapel von 1.000 bis 10.000 Datensätzen gut. Die Fortschrittsanzeige hilft bei der Überwachung lang laufender Aufträge.
Probieren Sie unsere kostenlosen JSONL-Tools
Möchten Sie keinen Code schreiben? Verwenden Sie unsere kostenlosen Online-Tools, um JSONL-Dateien direkt in Ihrem Browser anzuzeigen, zu validieren und zu konvertieren.