JSONL in Python: Lezen, Schrijven & Parseren
Een complete gids voor het werken met JSONL (JSON Lines) bestanden in Python. Leer hoe je JSONL-gegevens kunt lezen, schrijven, parseren en streamen met ingebouwde modules, pandas en high-performance bibliotheken.
Laatst bijgewerkt: februari 2026
Waarom Python voor JSONL?
Python is de meest populaire taal voor het werken met JSONL-bestanden, en dat is niet zonder reden. De ingebouwde json-module verwerkt JSON-parsing standaard, bestandsiteratie is standaard geheugenefficiënt, en het ecosysteem biedt krachtige bibliotheken zoals pandas en orjson voor gespecialiseerde workflows. Of je nu machine learning-datasets, applicatielogs of API-responses verwerkt, Python maakt JSONL-verwerking eenvoudig.
JSONL (JSON Lines) slaat één JSON-object per regel op, waardoor het ideaal is voor streaming, append-only logging en het verwerken van grote datasets zonder alles in het geheugen te laden. De regel-voor-regel bestandslezing van Python sluit perfect aan bij dit formaat. In deze gids leer je drie benaderingen voor het lezen van JSONL, twee benaderingen voor het schrijven ervan, en hoe je bestanden kunt verwerken die te groot zijn om in het geheugen te passen.
JSONL-bestanden lezen in Python
Er zijn verschillende manieren om JSONL-bestanden te lezen in Python, elk geschikt voor verschillende toepassingen. De standaard json-module werkt voor de meeste scenario's, pandas is handig voor tabelanalyse, en generators zijn het beste voor grote bestanden.
De eenvoudigste aanpak gebruikt de ingebouwde json-module van Python. Open het bestand, itereer regel voor regel en parseer elke regel met json.loads(). Dit laadt alle records in een lijst in het geheugen.
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])
Als je JSONL-gegevens tabellair zijn (dezelfde sleutels in elk record), kan pandas ze direct in een DataFrame lezen met een enkele functieaanroep. Dit is de snelste manier om te beginnen met het analyseren van gestructureerde JSONL-gegevens.
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}')
Voor bestanden die te groot zijn om in het geheugen te passen, gebruik je een generatorfunctie. Deze levert één record tegelijk, waardoor het geheugengebruik constant blijft ongeacht de bestandsgrootte. Dit is het aanbevolen patroon voor productie-datapipelines.
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-bestanden schrijven in Python
Het schrijven van JSONL-bestanden is eenvoudig: serialiseer elk record als een JSON-string en voeg een newline-teken toe. De belangrijkste regel is één JSON-object per regel, zonder afsluitende komma's of omsluitende array.
Gebruik json.dumps() om elk record te serialiseren en schrijf het vervolgens gevolgd door een newline. Stel ensure_ascii=False in om Unicode-tekens zoals Chinees, Japans of emoji te behouden in de uitvoer.
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')
Als je gegevens al in een pandas DataFrame staan, gebruik dan to_json() met orient='records' en lines=True om het direct als JSONL te exporteren. Dit is het omgekeerde van pd.read_json() met 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 voor JSONL
Python biedt verschillende JSON-parsingbibliotheken met verschillende prestatiekenmerken. De juiste keuze hangt af van je bestandsgrootte en prestatievereisten.
json (stdlib)
IngebouwdDe ingebouwde json-module van Python vereist geen installatie en werkt overal. Het is voldoende voor de meeste JSONL-werkbelastingen en ondersteunt alle standaard JSON-typen. De prestaties zijn voldoende voor bestanden tot enkele honderden MB.
orjson
Snelsteorjson is de snelste Python JSON-bibliotheek, geschreven in Rust. Het biedt 2-10x snellere parsing en serialisatie vergeleken met de standaard json-module. Het geeft bytes uit in plaats van strings en ondersteunt native dataclasses, datetime, numpy en UUID-typen.
ujson
Snelujson (UltraJSON) is een C-gebaseerde JSON-bibliotheek die 2-5x sneller is dan de standaard json-module. De API is vrijwel identiek aan de ingebouwde json-module, waardoor het een drop-in vervanging is. Een goed compromis tussen compatibiliteit en snelheid.
Grote JSONL-bestanden streamen
Bij het verwerken van JSONL-bestanden van gigabytes groot heb je een streaming-aanpak nodig die gegevens in batches leest, transformeert en schrijft. Dit houdt het geheugengebruik constant en biedt voortgangsregistratie.
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)
Dit patroon gebruikt constant geheugen door records te verwerken in batches van vaste grootte. De batch_size-parameter regelt de afweging tussen geheugengebruik en I/O-efficiëntie. Voor de meeste systemen werken batches van 1.000 tot 10.000 records goed. De voortgangsindicator helpt bij het monitoren van langlopende taken.
Probeer onze gratis JSONL-tools
Geen zin om code te schrijven? Gebruik onze gratis online tools om JSONL-bestanden te bekijken, valideren en converteren direct in je browser.