JSONL vs NDJSON: Wat is het verschil?
Een complete handleiding die JSONL (JSON Lines) en NDJSON (Newline Delimited JSON) vergelijkt — twee namen voor bijna hetzelfde formaat, met subtiele verschillen die het waard zijn om te kennen.
Laatst bijgewerkt: februari 2026
Snelle vergelijking: JSONL vs NDJSON
| Eigenschap | JSONL (JSON Lines) | NDJSON |
|---|---|---|
| Volledige naam | JSON Lines | Newline Delimited JSON |
| Bestandsextensie | .jsonl | .ndjson |
| Specificatie | jsonlines.org (informeel) | github.com/ndjson/ndjson-spec (informele specificatie) |
| Oorsprong | Gemeenschapsconventie, populair gemaakt door data science tools | Voorgesteld door Chris Olah, Thorsten Ball en anderen |
| Regelscheidingsteken | \n (nieuwe regel) | \n (nieuwe regel) |
| MIME-type | application/jsonl (onofficieel) | application/x-ndjson |
| Streamingondersteuning | Ja, regel voor regel | Ja, regel voor regel |
| Adoptie | OpenAI, Hugging Face, ML/AI-ecosysteem | Elasticsearch, Apache Spark, data engineering |
Wat is JSONL (JSON Lines)?
JSONL, kort voor JSON Lines, is een op tekst gebaseerd gegevensformaat waarbij elke regel een enkele geldige JSON-waarde bevat. Regels worden gescheiden door nieuwe regeltekens (\n). Het formaat werd populair gemaakt door de machine learning- en data science-gemeenschappen en is informeel gedefinieerd op jsonlines.org.
JSONL-bestanden gebruiken de .jsonl-bestandsextensie. Het formaat is de standaard geworden voor AI- en ML-trainingsgegevens — OpenAI vereist .jsonl-bestanden voor fine-tuning en Hugging Face-datasets gebruiken vaak het JSON Lines-formaat.
{"id": 1, "text": "Hello world", "label": "greeting"}{"id": 2, "text": "How are you?", "label": "question"}{"id": 3, "text": "Goodbye", "label": "farewell"}
Wat is NDJSON (Newline Delimited JSON)?
NDJSON, of Newline Delimited JSON, is een gegevensformaat waarbij elke regel een geldige JSON-waarde is gescheiden door nieuwe regeltekens. De specificatie wordt gehost op github.com/ndjson/ndjson-spec en is geformaliseerd om een meer gestructureerde standaard te bieden voor regel-gescheiden JSON-gegevens.
NDJSON-bestanden gebruiken de .ndjson-bestandsextensie en hebben een geregistreerd MIME-type van application/x-ndjson. Het formaat is breed geadopteerd in data engineering, logverwerking en streaming-applicaties — Elasticsearch, Apache Spark en veel HTTP-streaming-API's gebruiken NDJSON.
{"id": 1, "text": "Hello world", "label": "greeting"}{"id": 2, "text": "How are you?", "label": "question"}{"id": 3, "text": "Goodbye", "label": "farewell"}
Zijn JSONL en NDJSON hetzelfde formaat?
In de praktijk, ja — JSONL en NDJSON zijn functioneel identieke formaten. Beide slaan één JSON-waarde per regel op, gescheiden door nieuwe regeltekens (\n). Een .jsonl-bestand en een .ndjson-bestand met dezelfde gegevens zijn volledig uitwisselbaar, en elke tool die het ene formaat leest, kan het andere lezen.
De verschillen zijn puur in naamgeving, gemeenschapsadoptie en metadata-conventies. JSONL (JSON Lines) kwam voort uit de data science- en machine learning-gemeenschap, terwijl NDJSON (Newline Delimited JSON) werd geformaliseerd door de data engineering- en webstreaming-gemeenschap. Zie het als 'movie' vs 'film' — hetzelfde ding, verschillende naamvoorkeuren in verschillende kringen.
Het meest betekenisvolle verschil is de bestandsextensie (.jsonl vs .ndjson) en het MIME-type. NDJSON heeft een breder erkend MIME-type (application/x-ndjson) dat wordt gebruikt in HTTP-streaming-contexten, terwijl JSONL-bestanden de standaard zijn in AI/ML-workflows. Volg bij het kiezen tussen beide de conventie van je ecosysteem.
Belangrijkste verschillen tussen JSONL en NDJSON
1. Specificatie & autoriteit
Gedefinieerd op jsonlines.org met een beknopte, informele specificatie. De specificatie is eenvoudig: elke regel is een geldige JSON-waarde, regels worden gescheiden door '\n', en UTF-8-codering wordt aanbevolen.
Gedefinieerd op github.com/ndjson/ndjson-spec met een iets formelere specificatie. NDJSON vereist expliciet dat elke regel een geldige JSON-waarde is en dat het regelscheidingsteken '\n' is (niet '\r\n'), met een afsluitende nieuwe regel aanbevolen.
2. Bestandsextensie
Gebruikt de .jsonl-bestandsextensie. Dit is de standaard voor OpenAI fine-tuning-bestanden, Hugging Face-datasets en de meeste ML/AI-tools. GitHub en VS Code herkennen .jsonl-bestanden met syntaxiskleuring.
Gebruikt de .ndjson-bestandsextensie. Dit is gebruikelijk in data engineering-tools, Elasticsearch bulk-API's en streaming HTTP-responses. Veel editors ondersteunen ook .ndjson-syntaxiskleuring.
3. MIME-type
Geen officieel geregistreerd MIME-type. Veelvoorkomende onofficiële types zijn application/jsonl en application/json-lines. In de praktijk gebruiken veel systemen application/jsonl of vallen terug op application/json.
Gebruikt application/x-ndjson als MIME-type. Dit is breder erkend in HTTP-contexten en wordt gebruikt door Elasticsearch, de Fetch API-streamingstandaard en verschillende webframeworks voor streaming-responses.
4. Gemeenschap & ecosysteem-adoptie
Dominant in het AI/ML-ecosysteem. OpenAI, Anthropic, Google Gemini, Hugging Face en de meeste ML-frameworks gebruiken .jsonl. De term 'JSONL' wordt over het algemeen meer gezocht en erkend in de ontwikkelaarsgemeenschap.
Voorkeur in data engineering en backendsystemen. Elasticsearch, Apache Spark, PostgreSQL COPY en veel logaggregatie-tools gebruiken NDJSON. Het ndjson npm-pakket heeft miljoenen wekelijkse downloads.
Wanneer JSONL vs NDJSON gebruiken
- Trainingsgegevens voorbereiden voor OpenAI, Anthropic of andere LLM fine-tuning
- Werken met Hugging Face-datasets
- ML-pipelines en gegevensvoorbewerking bouwen
- Je team of documentatie verwijst naar 'JSON Lines'
- Bestanden uploaden naar AI/ML-platforms die .jsonl-extensie verwachten
- Werken in Python data science-omgevingen
- JSON-gegevens streamen via HTTP (Server-Sent Events, fetch streaming)
- Werken met Elasticsearch bulk-API
- Gegevenspipelines bouwen met Apache Spark of vergelijkbare tools
- Content-Type headers instellen (application/x-ndjson)
- Je infrastructuur of team gebruikt de NDJSON-conventie
- Werken met Node.js-streamingbibliotheken
Codevoorbeelden: JSONL en NDJSON lezen
# JSONL lezen - precies hetzelfde als NDJSON lezenimport jsonwith open('data.jsonl', 'r') as f:for line in f:record = json.loads(line.strip())print(record['text'])# Output:# Hello world# How are you?# Goodbye
// NDJSON lezen - precies hetzelfde als JSONL lezenimport { createReadStream } from 'fs';import { createInterface } from 'readline';const rl = createInterface({input: createReadStream('data.ndjson')});for await (const line of rl) {const record = JSON.parse(line);console.log(record.text);}// Output:// Hello world// How are you?// Goodbye