JSON vs JSONL : quelle est la différence ?
Un guide complet pour comprendre les formats JSON et JSONL (JSON Lines), leurs différences et quand utiliser chacun.
Dernière mise à jour : février 2026
Comparaison rapide
| Caractéristique | JSON | JSONL (JSON Lines) |
|---|---|---|
| Structure | Objet ou tableau unique | Un objet JSON par ligne |
| Extension de fichier | .json | .jsonl ou .ndjson |
| Analyse | Doit analyser le fichier entier | Peut analyser ligne par ligne |
| Streaming | Difficile | Support natif |
| Gestion des gros fichiers | Intensif en mémoire | Efficace en mémoire |
| Lisibilité humaine | Formaté avec indentation | Compact, un enregistrement par ligne |
| Validation de schéma | JSON Schema supporté | JSON Schema par ligne |
| Ajout de données | Doit réécrire le fichier entier | Il suffit d'ajouter une nouvelle ligne |
Qu'est-ce que JSON ?
JSON (JavaScript Object Notation) est un format d'échange de données léger, facile à lire et à écrire pour les humains, et facile à analyser et à générer pour les machines. Il est basé sur un sous-ensemble de JavaScript et est devenu le standard de facto pour l'échange de données sur le web.
Un fichier JSON contient une seule valeur JSON — généralement un objet ou un tableau. Le fichier entier doit être analysé comme une seule unité pour accéder à n'importe quelle donnée qu'il contient.
[{"name": "Alice", "age": 30, "city": "New York"},{"name": "Bob", "age": 25, "city": "London"},{"name": "Charlie", "age": 35, "city": "Tokyo"}]
Qu'est-ce que JSONL (JSON Lines) ?
JSONL (JSON Lines), également connu sous le nom de Newline Delimited JSON (NDJSON), est un format texte où chaque ligne est un objet JSON valide. Les lignes sont séparées par des caractères de retour à la ligne (\n). Contrairement au JSON standard, il n'y a pas de tableau ou d'objet englobant autour des données.
Chaque ligne d'un fichier JSONL est autonome et peut être analysée indépendamment. Cela rend JSONL idéal pour le streaming de données, les fichiers journaux et le traitement de grands jeux de données sans tout charger en mémoire.
{"name": "Alice", "age": 30, "city": "New York"}{"name": "Bob", "age": 25, "city": "London"}{"name": "Charlie", "age": 35, "city": "Tokyo"}
Différences clés entre JSON et JSONL
1. Format et structure du fichier
JSON enveloppe toutes les données dans un seul objet ou tableau. Le fichier doit être syntaxiquement valide dans son ensemble — un crochet manquant à la fin invalide le fichier entier.
JSONL stocke un objet JSON par ligne. Chaque ligne est indépendante — si une ligne contient une erreur, les autres lignes peuvent toujours être analysées.
2. Analyse et utilisation de la mémoire
JSON nécessite le chargement et l'analyse du fichier entier en une seule fois. Un fichier JSON de 1 Go nécessiterait environ 1 Go+ de mémoire pour l'analyse.
JSONL peut être lu et analysé ligne par ligne (streaming). Même un fichier JSONL de 10 Go peut être traité avec un minimum de mémoire en lisant une ligne à la fois.
3. Streaming et données en temps réel
JSON n'est pas conçu pour le streaming. Vous ne pouvez pas commencer à traiter les données tant que le fichier ou la réponse entière n'a pas été reçue et analysée.
JSONL est idéal pour le streaming. Chaque ligne peut être traitée dès qu'elle est reçue, ce qui le rend parfait pour les flux de données en temps réel, les journaux et les événements envoyés par le serveur.
4. Ajout et écriture de données
L'ajout de données à un tableau JSON nécessite la lecture du fichier entier, son analyse, l'ajout du nouvel élément et la réécriture du fichier complet.
L'ajout à un fichier JSONL est aussi simple que d'ajouter une nouvelle ligne à la fin. Pas besoin de lire ou de modifier les données existantes. C'est O(1) contre O(n) pour JSON.
5. Lisibilité humaine
JSON supporte l'affichage formaté avec indentation, ce qui le rend très lisible pour les fichiers de configuration et les réponses API.
JSONL est compact par conception — un enregistrement par ligne. Il est optimisé pour le traitement machine plutôt que pour la lecture humaine, bien que les lignes individuelles puissent être formatées.
Quand utiliser JSON vs JSONL
- Vous travaillez avec des fichiers de configuration
- Vous construisez des corps de requêtes/réponses API REST
- Vous stockez des données structurées de petite taille (moins de 10 Mo)
- Les données doivent être lisibles et modifiables par un humain
- Vous travaillez avec des structures de données imbriquées et hiérarchiques
- Échange de données côté navigateur
- Vous traitez de grands jeux de données (100 Mo+)
- Vous streamez des données en temps réel
- Vous écrivez des fichiers journaux et des données d'événements
- Vous entraînez des modèles d'apprentissage automatique (OpenAI, Hugging Face)
- Vous travaillez avec des pipelines ETL et du traitement de données
- Vous ajoutez fréquemment des données
- Vous traitez des données avec des outils Unix (grep, awk, sed)
Cas d'utilisation courants
Apprentissage automatique et IA
JSONLJSONL est le format standard pour les données d'entraînement ML. OpenAI utilise JSONL pour les jeux de données de fine-tuning, et de nombreux frameworks ML attendent une entrée JSONL. Chaque ligne représente un exemple d'entraînement.
Journalisation applicative
JSONLLes journaux serveur, les événements applicatifs et les pistes d'audit sont naturellement adaptés à JSONL. Chaque événement est écrit sur une seule ligne, ce qui facilite l'ajout, la recherche avec grep et le traitement avec des outils de streaming.
API Web et configuration
JSONLes API REST utilisent généralement JSON pour les corps de requêtes et de réponses. Les fichiers de configuration (.json) utilisent JSON pour des paramètres structurés et lisibles avec des objets imbriqués.
Big Data et analytique
JSONLLes pipelines de données, les processus ETL et les outils d'analyse utilisent JSONL pour traiter de grands volumes de données. Chaque enregistrement peut être traité indépendamment, permettant le traitement parallèle et les modèles MapReduce.
Exemples de code
// Reading JSON - must load entire fileconst data = JSON.parse(fs.readFileSync('data.json', 'utf8'));// Access datadata.forEach(item => {console.log(item.name);});
// Reading JSONL - stream line by lineimport { createReadStream } from 'fs';import { createInterface } from 'readline';const rl = createInterface({input: createReadStream('data.jsonl')});for await (const line of rl) {const item = JSON.parse(line);console.log(item.name);}
// JSON array to JSONLconst jsonArray = JSON.parse(fs.readFileSync('data.json', 'utf8'));const jsonl = jsonArray.map(item => JSON.stringify(item)).join('\n');fs.writeFileSync('data.jsonl', jsonl);
// JSONL to JSON arrayconst lines = fs.readFileSync('data.jsonl', 'utf8').split('\n').filter(line => line.trim());const jsonArray = lines.map(line => JSON.parse(line));fs.writeFileSync('data.json', JSON.stringify(jsonArray, null, 2));
Convertir JSON & JSONL en ligne
Utilisez nos outils en ligne gratuits pour convertir instantanément entre les formats JSON et JSONL — aucune installation nécessaire.