JSONL vs NDJSON : Quelle est la différence ?
Un guide complet comparant JSONL (JSON Lines) et NDJSON (Newline Delimited JSON) — deux noms pour presque le même format, avec des différences subtiles à connaître.
Dernière mise à jour : février 2026
Comparaison rapide : JSONL vs NDJSON
| Caractéristique | JSONL (JSON Lines) | NDJSON |
|---|---|---|
| Nom complet | JSON Lines | Newline Delimited JSON |
| Extension de fichier | .jsonl | .ndjson |
| Spécification | jsonlines.org (informelle) | github.com/ndjson/ndjson-spec (spécification informelle) |
| Origine | Convention communautaire, popularisée par les outils de data science | Proposé par Chris Olah, Thorsten Ball et d'autres |
| Délimiteur de ligne | \n (retour à la ligne) | \n (retour à la ligne) |
| Type MIME | application/jsonl (non officiel) | application/x-ndjson |
| Support du streaming | Oui, ligne par ligne | Oui, ligne par ligne |
| Adoption | OpenAI, Hugging Face, écosystème ML/AI | Elasticsearch, Apache Spark, ingénierie des données |
Qu'est-ce que JSONL (JSON Lines) ?
JSONL, abréviation de JSON Lines, est un format de données texte où chaque ligne contient une seule valeur JSON valide. Les lignes sont séparées par des caractères de retour à la ligne (\n). Le format a été popularisé par les communautés d'apprentissage automatique et de data science, et est défini de manière informelle sur jsonlines.org.
Les fichiers JSONL utilisent l'extension de fichier .jsonl. Le format est devenu le standard pour les données d'entraînement AI et ML — OpenAI requiert des fichiers .jsonl pour le fine-tuning, et les jeux de données Hugging Face utilisent couramment le format JSON Lines.
{"id": 1, "text": "Hello world", "label": "greeting"}{"id": 2, "text": "How are you?", "label": "question"}{"id": 3, "text": "Goodbye", "label": "farewell"}
Qu'est-ce que NDJSON (Newline Delimited JSON) ?
NDJSON, ou Newline Delimited JSON, est un format de données où chaque ligne est une valeur JSON valide séparée par des caractères de retour à la ligne. La spécification est hébergée sur github.com/ndjson/ndjson-spec et a été formalisée pour fournir un standard plus structuré pour les données JSON délimitées par des lignes.
Les fichiers NDJSON utilisent l'extension de fichier .ndjson et ont un type MIME enregistré application/x-ndjson. Le format est largement adopté dans l'ingénierie des données, le traitement des journaux et les applications de streaming — Elasticsearch, Apache Spark et de nombreuses API de streaming HTTP utilisent NDJSON.
{"id": 1, "text": "Hello world", "label": "greeting"}{"id": 2, "text": "How are you?", "label": "question"}{"id": 3, "text": "Goodbye", "label": "farewell"}
JSONL et NDJSON sont-ils le même format ?
En pratique, oui — JSONL et NDJSON sont des formats fonctionnellement identiques. Les deux stockent une valeur JSON par ligne, séparées par des caractères de retour à la ligne (\n). Un fichier .jsonl et un fichier .ndjson avec les mêmes données sont complètement interchangeables, et tout outil qui lit un format peut lire l'autre.
Les différences sont purement nominales, d'adoption communautaire et de conventions de métadonnées. JSONL (JSON Lines) est apparu de la communauté data science et machine learning, tandis que NDJSON (Newline Delimited JSON) a été formalisé par la communauté d'ingénierie des données et de streaming web. Considérez-le comme « film » vs « cinéma » — même chose, préférence de nom différente dans différents cercles.
La différence la plus significative est l'extension de fichier (.jsonl vs .ndjson) et le type MIME. NDJSON a un type MIME plus largement reconnu (application/x-ndjson) qui est utilisé dans les contextes de streaming HTTP, tandis que les fichiers JSONL sont le standard dans les workflows AI/ML. Lors du choix entre eux, suivez la convention de votre écosystème.
Différences clés entre JSONL et NDJSON
1. Spécification et autorité
Défini sur jsonlines.org avec une spécification concise et informelle. La spécification est simple : chaque ligne est une valeur JSON valide, les lignes sont séparées par '\n', et l'encodage UTF-8 est recommandé.
Défini sur github.com/ndjson/ndjson-spec avec une spécification légèrement plus formelle. NDJSON exige explicitement que chaque ligne soit une valeur JSON valide et que le séparateur de ligne soit '\n' (pas '\r\n'), avec un retour à la ligne final recommandé.
2. Extension de fichier
Utilise l'extension de fichier .jsonl. C'est le standard pour les fichiers de fine-tuning OpenAI, les jeux de données Hugging Face et la plupart des outils ML/AI. GitHub et VS Code reconnaissent les fichiers .jsonl avec coloration syntaxique.
Utilise l'extension de fichier .ndjson. C'est courant dans les outils d'ingénierie des données, les API bulk Elasticsearch et les réponses HTTP en streaming. De nombreux éditeurs supportent également la coloration syntaxique .ndjson.
3. Type MIME
Aucun type MIME officiellement enregistré. Les types non officiels courants incluent application/jsonl et application/json-lines. En pratique, de nombreux systèmes utilisent application/jsonl ou se rabattent sur application/json.
Utilise application/x-ndjson comme type MIME. Il est plus largement reconnu dans les contextes HTTP et est utilisé par Elasticsearch, le standard Fetch API streaming et divers frameworks web pour les réponses en streaming.
4. Adoption communautaire et écosystème
Dominant dans l'écosystème AI/ML. OpenAI, Anthropic, Google Gemini, Hugging Face et la plupart des frameworks ML utilisent .jsonl. Le terme 'JSONL' est plus couramment recherché et reconnu dans la communauté des développeurs en général.
Préféré dans l'ingénierie des données et les systèmes backend. Elasticsearch, Apache Spark, PostgreSQL COPY et de nombreux outils d'agrégation de journaux utilisent NDJSON. Le package npm ndjson a des millions de téléchargements hebdomadaires.
Quand utiliser JSONL vs NDJSON
- Vous préparez des données d'entraînement pour OpenAI, Anthropic ou d'autres fine-tuning de LLM
- Vous travaillez avec des jeux de données Hugging Face
- Vous construisez des pipelines ML et du prétraitement de données
- Votre équipe ou documentation fait référence à 'JSON Lines'
- Vous téléversez des fichiers vers des plateformes AI/ML qui attendent l'extension .jsonl
- Vous travaillez dans des environnements Python data science
- Vous streamez des données JSON sur HTTP (Server-Sent Events, fetch streaming)
- Vous travaillez avec l'API bulk Elasticsearch
- Vous construisez des pipelines de données avec Apache Spark ou outils similaires
- Vous définissez des en-têtes Content-Type (application/x-ndjson)
- Votre infrastructure ou équipe utilise la convention NDJSON
- Vous travaillez avec des bibliothèques de streaming Node.js
Exemples de code : Lecture de JSONL et NDJSON
# Lecture JSONL - exactement comme la lecture NDJSONimport jsonwith open('data.jsonl', 'r') as f:for line in f:record = json.loads(line.strip())print(record['text'])# Sortie :# Hello world# How are you?# Goodbye
// Lecture NDJSON - exactement comme la lecture JSONLimport { 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);}// Sortie :// Hello world// How are you?// Goodbye