Tutoriel JSONL : Créer, lire et convertir des fichiers JSONL
Un tutoriel étape par étape couvrant tout ce que vous devez savoir sur le travail avec les fichiers JSONL (JSON Lines). Inclut des exemples de code en Python, JavaScript et des outils CLI.
Dernière mise à jour : février 2026
Qu'est-ce que JSONL ?
JSONL (JSON Lines) est un format texte léger où chaque ligne est une valeur JSON valide et distincte. Contrairement au JSON standard, qui encapsule toutes les données dans un seul tableau ou objet, JSONL stocke un enregistrement par ligne, séparé par des caractères de retour à la ligne (\n).
Cette structure ligne par ligne rend JSONL idéal pour le streaming de grands jeux de données, l'ajout d'enregistrements sans réécrire le fichier, et le traitement des données en parallèle. Il est largement utilisé par OpenAI pour les jeux de données de fine-tuning, par les systèmes de journalisation comme la stack ELK, et par les outils big data tels que BigQuery et Apache Spark.
{"id":1,"name":"Alice","role":"engineer"}{"id":2,"name":"Bob","role":"designer"}{"id":3,"name":"Charlie","role":"manager"}
Comment créer des fichiers JSONL
Créer un fichier JSONL est simple : sérialisez chaque enregistrement comme une chaîne JSON sur une seule ligne et écrivez-la suivie d'un retour à la ligne. Voici des exemples dans les langages les plus populaires.
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`);
Manuel / Éditeur de texte
Vous pouvez également créer des fichiers JSONL dans n'importe quel éditeur de texte. Tapez simplement un objet JSON valide par ligne sans virgules entre les lignes, et enregistrez le fichier avec une extension .jsonl. Assurez-vous que chaque ligne est complète et JSON valide.
Comment lire des fichiers JSONL
Parce que chaque ligne est une valeur JSON indépendante, lire des fichiers JSONL est aussi simple que d'itérer sur les lignes. Voici les approches les plus courantes.
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}`);}
# Afficher les 10 premières ligneshead -n 10 data.jsonl# Compter le nombre total d'enregistrementswc -l data.jsonl# Afficher joliment chaque ligne avec jqcat data.jsonl | jq .# Filtrer les enregistrements où le rôle est "engineer"cat data.jsonl | jq 'select(.role == "engineer")'# Extraire uniquement le champ namecat data.jsonl | jq -r '.name'# Rechercher des lignes contenant un mot-clégrep '"Alice"' data.jsonl
Comment convertir JSON en JSONL
Si vous avez un tableau JSON standard, convertir en JSONL signifie écrire chaque élément comme une ligne séparée. C'est l'une des opérations JSONL les plus courantes.
import json# Lire le tableau JSONwith open("data.json", "r", encoding="utf-8") as f:data = json.load(f) # expects a JSON array# Écrire en JSONLwith 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';// Lire le tableau JSONconst data = JSON.parse(readFileSync('data.json', 'utf-8'));// Écrire en JSONLconst 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`);
Comment convertir CSV en JSONL
Convertir CSV en JSONL consiste à mapper chaque ligne à un objet JSON, en utilisant l'en-tête CSV comme noms de champs. C'est utile lors de la migration de données tabulaires vers un format adapté au streaming ou à l'apprentissage automatique.
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');
Meilleures pratiques JSONL
Utilisez l'encodage UTF-8 pour tous les fichiers JSONL. Cela garantit la compatibilité entre les plateformes et supporte les caractères internationaux.
Écrivez exactement un objet JSON par ligne. Ne divisez jamais un objet JSON sur plusieurs lignes ou ne placez jamais plusieurs objets sur la même ligne.
N'ajoutez pas de virgules entre les lignes. Contrairement aux tableaux JSON, JSONL utilise les caractères de retour à la ligne comme seul délimiteur.
Validez chaque ligne indépendamment. Chaque ligne doit être une valeur JSON complète et valide. Utilisez un validateur JSONL pour détecter les erreurs de syntaxe tôt.
Utilisez des lectures en streaming pour les gros fichiers. Au lieu de charger tout le fichier en mémoire, traitez-le ligne par ligne en utilisant readline (Node.js) ou l'itération de fichiers (Python).
Gardez les enregistrements cohérents en structure. Bien que JSONL permette différents schémas par ligne, garder une structure uniforme facilite grandement le traitement des données.
Évitez les espaces en fin de ligne. Assurez-vous que les lignes n'ont pas d'espaces ou de tabulations supplémentaires qui pourraient causer des problèmes d'analyse.
Terminez le fichier par un retour à la ligne. Un retour à la ligne final après le dernier enregistrement aide les outils comme wc et cat à gérer correctement le fichier.
Erreurs JSONL courantes
[
{"name":"Alice"},
{"name":"Bob"}
]{"name":"Alice"}
{"name":"Bob"}JSONL n'est pas un tableau JSON. N'encapsulez pas les lignes dans des crochets et n'ajoutez pas de virgules entre elles. Chaque ligne est autonome.
{"name":"Alice"},
{"name":"Bob"},{"name":"Alice"}
{"name":"Bob"}Les virgules finales après chaque ligne ou les virgules entre les lignes sont invalides en JSONL. Le caractère de retour à la ligne est le seul séparateur.
{
"name": "Alice",
"age": 30
}{"name":"Alice","age":30}Chaque objet JSON doit tenir sur une seule ligne. Le JSON joliment formaté avec indentation et sauts de ligne n'est pas du JSONL valide.
{"text":"She said "hello""}{"text":"She said \"hello\""}Les guillemets et caractères spéciaux à l'intérieur des chaînes JSON doivent être correctement échappés avec des barres obliques inverses. Les guillemets non échappés casseront l'analyseur JSON.