JSONL Tutorial: JSONL-bestanden maken, lezen & converteren
Een stapsgewijze tutorial die alles behandelt wat je moet weten over werken met JSONL (JSON Lines) bestanden. Inclusief codevoorbeelden in Python, JavaScript en CLI-tools.
Laatst bijgewerkt: februari 2026
Wat is JSONL?
JSONL (JSON Lines) is een lichtgewicht tekstformaat waarbij elke regel een afzonderlijke, geldige JSON-waarde is. In tegenstelling tot standaard JSON, dat alle gegevens in één array of object verpakt, slaat JSONL één record per regel op, gescheiden door nieuwe regeltekens (\n).
Deze regel-voor-regel-structuur maakt JSONL ideaal voor het streamen van grote datasets, het toevoegen van records zonder het bestand te herschrijven en het parallel verwerken van gegevens. Het wordt veel gebruikt door OpenAI voor fine-tuning-datasets, door logsystemen zoals de ELK-stack en door big data-tools zoals BigQuery en Apache Spark.
{"id":1,"name":"Alice","role":"engineer"}{"id":2,"name":"Bob","role":"designer"}{"id":3,"name":"Charlie","role":"manager"}
Hoe JSONL-bestanden maken
Een JSONL-bestand maken is eenvoudig: serialiseer elk record als een enkele-regel JSON-string en schrijf het gevolgd door een nieuwe regel. Hier zijn voorbeelden in de populairste talen.
import jsonrecords = [{"id": 1, "name": "Alice", "role": "engineer"},{"id": 2, "name": "Bob", "role": "designer"},{"id": 3, "name": "Charlie", "role": "manager"},]with open("output.jsonl", "w", encoding="utf-8") as f:for record in records:f.write(json.dumps(record, ensure_ascii=False) + "\n")print("Created output.jsonl with", len(records), "records")
import { writeFileSync } from 'fs';const records = [{ id: 1, name: 'Alice', role: 'engineer' },{ id: 2, name: 'Bob', role: 'designer' },{ id: 3, name: 'Charlie', role: 'manager' },];const jsonl = records.map(record => JSON.stringify(record)).join('\n');writeFileSync('output.jsonl', jsonl + '\n', 'utf-8');console.log(`Created output.jsonl with ${records.length} records`);
Handmatig / Teksteditor
Je kunt ook JSONL-bestanden maken in elke teksteditor. Typ gewoon één geldig JSON-object per regel zonder komma's tussen regels, en sla het bestand op met een .jsonl-extensie. Zorg ervoor dat elke regel compleet en geldige JSON is.
Hoe JSONL-bestanden lezen
Omdat elke regel een onafhankelijke JSON-waarde is, is het lezen van JSONL-bestanden zo eenvoudig als itereren over regels. Hier zijn de meest voorkomende benaderingen.
import jsonwith open("data.jsonl", "r", encoding="utf-8") as f:for line_number, line in enumerate(f, 1):line = line.strip()if not line:continue # skip empty linesrecord = json.loads(line)print(f"Line {line_number}: {record['name']} - {record['role']}")
import { createReadStream } from 'fs';import { createInterface } from 'readline';const rl = createInterface({input: createReadStream('data.jsonl', 'utf-8'),});let lineNumber = 0;for await (const line of rl) {if (!line.trim()) continue; // skip empty lineslineNumber++;const record = JSON.parse(line);console.log(`Line ${lineNumber}: ${record.name} - ${record.role}`);}
# Eerste 10 regels bekijkenhead -n 10 data.jsonl# Totaal aantal records tellenwc -l data.jsonl# Elke regel mooi afdrukken met jqcat data.jsonl | jq .# Records filteren waar role "engineer" iscat data.jsonl | jq 'select(.role == "engineer")'# Alleen het naamveld extraherencat data.jsonl | jq -r '.name'# Zoeken naar regels die een trefwoord bevattengrep '"Alice"' data.jsonl
Hoe JSON naar JSONL converteren
Als je een standaard JSON-array hebt, betekent converteren naar JSONL dat je elk element als een aparte regel schrijft. Dit is een van de meest voorkomende JSONL-bewerkingen.
import json# JSON-array lezenwith open("data.json", "r", encoding="utf-8") as f:data = json.load(f) # expects a JSON array# Als JSONL schrijvenwith open("data.jsonl", "w", encoding="utf-8") as f:for record in data:f.write(json.dumps(record, ensure_ascii=False) + "\n")print(f"Converted {len(data)} records from JSON to JSONL")
import { readFileSync, writeFileSync } from 'fs';// JSON-array lezenconst data = JSON.parse(readFileSync('data.json', 'utf-8'));// Als JSONL schrijvenconst jsonl = data.map(record => JSON.stringify(record)).join('\n');writeFileSync('data.jsonl', jsonl + '\n', 'utf-8');console.log(`Converted ${data.length} records from JSON to JSONL`);
Hoe CSV naar JSONL converteren
CSV naar JSONL converteren zet elke rij om in een JSON-object, waarbij de CSV-header als veldnamen wordt gebruikt. Dit is handig bij het migreren van tabelgegevens naar een formaat geschikt voor streaming of machine learning.
import csvimport jsonwith open("data.csv", "r", encoding="utf-8") as csv_file:reader = csv.DictReader(csv_file)with open("data.jsonl", "w", encoding="utf-8") as jsonl_file:for row in reader:jsonl_file.write(json.dumps(row, ensure_ascii=False) + "\n")print("Converted CSV to JSONL successfully")
import { readFileSync, writeFileSync } from 'fs';const csv = readFileSync('data.csv', 'utf-8');const lines = csv.trim().split('\n');const headers = lines[0].split(',');const jsonl = lines.slice(1).map(line => {const values = line.split(',');const obj = {'};headers.forEach((h, i) => obj[h.trim()] = values[i]?.trim());return JSON.stringify(obj);}).join('\n');writeFileSync('data.jsonl', jsonl + '\n', 'utf-8');console.log('Converted CSV to JSONL successfully');
JSONL best practices
Gebruik UTF-8-codering voor alle JSONL-bestanden. Dit zorgt voor compatibiliteit tussen platforms en ondersteunt internationale tekens.
Schrijf precies één JSON-object per regel. Splits nooit een JSON-object over meerdere regels of plaats meerdere objecten op dezelfde regel.
Voeg geen komma's toe tussen regels. In tegenstelling tot JSON-arrays gebruikt JSONL nieuwe regeltekens als enige scheidingsteken.
Valideer elke regel onafhankelijk. Elke regel moet een complete, geldige JSON-waarde zijn. Gebruik een JSONL-validator om syntaxfouten vroeg op te sporen.
Gebruik streaming reads voor grote bestanden. In plaats van het hele bestand in het geheugen te laden, verwerk het regel voor regel met readline (Node.js) of bestandsiteratie (Python).
Houd records consistent in structuur. Hoewel JSONL verschillende schema's per regel toestaat, maakt het behouden van een uniforme structuur gegevensverwerking veel eenvoudiger.
Vermijd extra witruimte. Zorg ervoor dat regels geen extra spaties of tabs hebben die parseerfouten kunnen veroorzaken.
Eindig het bestand met een nieuwe regel. Een afsluitende nieuwe regel na het laatste record helpt tools zoals wc en cat het bestand correct te verwerken.
Veelvoorkomende JSONL-fouten
[
{"name":"Alice"},
{"name":"Bob"}
]{"name":"Alice"}
{"name":"Bob"}JSONL is geen JSON-array. Verpak regels niet in vierkante haken of voeg komma's toe tussen ze. Elke regel staat op zichzelf.
{"name":"Alice"},
{"name":"Bob"},{"name":"Alice"}
{"name":"Bob"}Afsluitende komma's na elke regel of komma's tussen regels zijn ongeldig in JSONL. Het nieuwe regelteken is het enige scheidingsteken.
{
"name": "Alice",
"age": 30
}{"name":"Alice","age":30}Elk JSON-object moet op één regel passen. Mooi opgemaakte JSON met inspringingen en regeleinden is geen geldige JSONL.
{"text":"She said "hello""}{"text":"She said \"hello\""}Aanhalingstekens en speciale tekens in JSON-strings moeten correct worden geëscaped met backslashes. Niet-geëscapete aanhalingstekens breken de JSON-parser.