JSONL vs NDJSON: Was ist der Unterschied?
Ein vollständiger Leitfaden zum Vergleich von JSONL (JSON Lines) und NDJSON (Newline Delimited JSON) — zwei Namen für nahezu dasselbe Format mit subtilen Unterschieden, die es wert sind, gekannt zu werden.
Zuletzt aktualisiert: Februar 2026
Schnellvergleich: JSONL vs NDJSON
| Merkmal | JSONL (JSON Lines) | NDJSON |
|---|---|---|
| Vollständiger Name | JSON Lines | Newline Delimited JSON |
| Dateierweiterung | .jsonl | .ndjson |
| Spezifikation | jsonlines.org (informell) | github.com/ndjson/ndjson-spec (informelle Spezifikation) |
| Herkunft | Community-Konvention, popularisiert durch Data-Science-Tools | Vorgeschlagen von Chris Olah, Thorsten Ball und anderen |
| Zeilentrennzeichen | \n (Zeilenumbruch) | \n (Zeilenumbruch) |
| MIME-Typ | application/jsonl (inoffiziell) | application/x-ndjson |
| Streaming-Unterstützung | Ja, zeilenweise | Ja, zeilenweise |
| Verbreitung | OpenAI, Hugging Face, ML/AI-Ökosystem | Elasticsearch, Apache Spark, Data Engineering |
Was ist JSONL (JSON Lines)?
JSONL, kurz für JSON Lines, ist ein textbasiertes Datenformat, bei dem jede Zeile einen einzelnen gültigen JSON-Wert enthält. Zeilen werden durch Zeilenumbruchzeichen (\n) getrennt. Das Format wurde von den Machine-Learning- und Data-Science-Communities popularisiert und ist informell bei jsonlines.org definiert.
JSONL-Dateien verwenden die Dateierweiterung .jsonl. Das Format ist zum Standard für AI- und ML-Trainingsdaten geworden — OpenAI benötigt .jsonl-Dateien für Fine-Tuning, und Hugging-Face-Datensätze verwenden häufig das JSON-Lines-Format.
{"id": 1, "text": "Hello world", "label": "greeting"}{"id": 2, "text": "How are you?", "label": "question"}{"id": 3, "text": "Goodbye", "label": "farewell"}
Was ist NDJSON (Newline Delimited JSON)?
NDJSON, oder Newline Delimited JSON, ist ein Datenformat, bei dem jede Zeile ein gültiger JSON-Wert ist, getrennt durch Zeilenumbruchzeichen. Die Spezifikation ist bei github.com/ndjson/ndjson-spec gehostet und wurde formalisiert, um einen strukturierteren Standard für zeilenbasierte JSON-Daten bereitzustellen.
NDJSON-Dateien verwenden die Dateierweiterung .ndjson und haben einen registrierten MIME-Typ application/x-ndjson. Das Format ist weit verbreitet im Data Engineering, bei der Protokollverarbeitung und in Streaming-Anwendungen — Elasticsearch, Apache Spark und viele HTTP-Streaming-APIs verwenden NDJSON.
{"id": 1, "text": "Hello world", "label": "greeting"}{"id": 2, "text": "How are you?", "label": "question"}{"id": 3, "text": "Goodbye", "label": "farewell"}
Sind JSONL und NDJSON dasselbe Format?
In der Praxis ja — JSONL und NDJSON sind funktional identische Formate. Beide speichern einen JSON-Wert pro Zeile, getrennt durch Zeilenumbruchzeichen (\n). Eine .jsonl-Datei und eine .ndjson-Datei mit denselben Daten sind vollständig austauschbar, und jedes Tool, das ein Format lesen kann, kann auch das andere lesen.
Die Unterschiede liegen rein in der Namensgebung, der Community-Akzeptanz und den Metadaten-Konventionen. JSONL (JSON Lines) kam aus der Data-Science- und Machine-Learning-Community, während NDJSON (Newline Delimited JSON) von der Data-Engineering- und Web-Streaming-Community formalisiert wurde. Denken Sie daran wie an "movie" vs "film" — dasselbe, unterschiedliche Namenspräferenzen in verschiedenen Kreisen.
Der bedeutendste Unterschied ist die Dateierweiterung (.jsonl vs .ndjson) und der MIME-Typ. NDJSON hat einen weiter verbreiteten MIME-Typ (application/x-ndjson), der in HTTP-Streaming-Kontexten verwendet wird, während JSONL-Dateien der Standard in AI/ML-Workflows sind. Folgen Sie bei der Wahl zwischen ihnen der Konvention Ihres Ökosystems.
Hauptunterschiede zwischen JSONL und NDJSON
1. Spezifikation & Autorität
Definiert bei jsonlines.org mit einer prägnanten, informellen Spezifikation. Die Spezifikation ist einfach: Jede Zeile ist ein gültiger JSON-Wert, Zeilen werden durch '\n' getrennt, und UTF-8-Kodierung wird empfohlen.
Definiert bei github.com/ndjson/ndjson-spec mit einer etwas formelleren Spezifikation. NDJSON verlangt ausdrücklich, dass jede Zeile ein gültiger JSON-Wert ist und dass das Zeilentrennzeichen '\n' (nicht '\r\n') ist, mit einem empfohlenen abschließenden Zeilenumbruch.
2. Dateierweiterung
Verwendet die Dateierweiterung .jsonl. Dies ist der Standard für OpenAI-Fine-Tuning-Dateien, Hugging-Face-Datensätze und die meisten ML/AI-Tools. GitHub und VS Code erkennen .jsonl-Dateien mit Syntaxhervorhebung.
Verwendet die Dateierweiterung .ndjson. Dies ist üblich bei Data-Engineering-Tools, Elasticsearch-Bulk-APIs und Streaming-HTTP-Antworten. Viele Editoren unterstützen auch .ndjson-Syntaxhervorhebung.
3. MIME-Typ
Kein offiziell registrierter MIME-Typ. Gängige inoffizielle Typen sind application/jsonl und application/json-lines. In der Praxis verwenden viele Systeme application/jsonl oder fallen auf application/json zurück.
Verwendet application/x-ndjson als MIME-Typ. Dieser ist in HTTP-Kontexten weiter anerkannt und wird von Elasticsearch, dem Fetch-API-Streaming-Standard und verschiedenen Web-Frameworks für Streaming-Antworten verwendet.
4. Community- & Ökosystem-Akzeptanz
Dominant im AI/ML-Ökosystem. OpenAI, Anthropic, Google Gemini, Hugging Face und die meisten ML-Frameworks verwenden .jsonl. Der Begriff 'JSONL' wird in der Entwickler-Community insgesamt häufiger gesucht und erkannt.
Bevorzugt im Data Engineering und Backend-Systemen. Elasticsearch, Apache Spark, PostgreSQL COPY und viele Log-Aggregations-Tools verwenden NDJSON. Das ndjson-npm-Paket hat Millionen wöchentliche Downloads.
Wann JSONL vs NDJSON verwenden
- Sie Trainingsdaten für OpenAI, Anthropic oder andere LLM-Fine-Tuning vorbereiten
- Sie mit Hugging-Face-Datensätzen arbeiten
- Sie ML-Pipelines und Datenvorverarbeitung aufbauen
- Ihr Team oder Ihre Dokumentation auf 'JSON Lines' verweist
- Sie Dateien auf AI/ML-Plattformen hochladen, die die .jsonl-Erweiterung erwarten
- Sie in Python-Data-Science-Umgebungen arbeiten
- Sie JSON-Daten über HTTP streamen (Server-Sent Events, Fetch-Streaming)
- Sie mit der Elasticsearch-Bulk-API arbeiten
- Sie Datenpipelines mit Apache Spark oder ähnlichen Tools aufbauen
- Sie Content-Type-Header setzen (application/x-ndjson)
- Ihre Infrastruktur oder Ihr Team die NDJSON-Konvention verwendet
- Sie mit Node.js-Streaming-Bibliotheken arbeiten
Code-Beispiele: JSONL und NDJSON lesen
# JSONL lesen - genau das gleiche wie NDJSON lesenimport jsonwith open('data.jsonl', 'r') as f:for line in f:record = json.loads(line.strip())print(record['text'])# Ausgabe:# Hello world# How are you?# Goodbye
// NDJSON lesen - genau das gleiche wie JSONL lesenimport { 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);}// Ausgabe:// Hello world// How are you?// Goodbye