JSONL en Python : Lecture, écriture et analyse

Un guide complet pour travailler avec les fichiers JSONL (JSON Lines) en Python. Apprenez à lire, écrire, analyser et streamer des données JSONL avec les modules intégrés, pandas et les bibliothèques haute performance.

Dernière mise à jour : février 2026

Pourquoi Python pour JSONL ?

Python est le langage le plus populaire pour travailler avec les fichiers JSONL, et pour de bonnes raisons. Son module json intégré gère l'analyse JSON nativement, l'itération sur les fichiers est efficace en mémoire par défaut, et l'écosystème offre des bibliothèques puissantes comme pandas et orjson pour des workflows spécialisés. Que vous traitiez des jeux de données d'apprentissage automatique, des journaux d'application ou des réponses d'API, Python rend la manipulation de JSONL simple.

JSONL (JSON Lines) stocke un objet JSON par ligne, ce qui le rend idéal pour le streaming, la journalisation en ajout seul et le traitement de grands jeux de données sans tout charger en mémoire. La lecture ligne par ligne de Python s'aligne parfaitement avec ce format. Dans ce guide, vous apprendrez trois approches pour lire du JSONL, deux approches pour l'écrire, et comment gérer les fichiers trop volumineux pour tenir en mémoire.

Lire des fichiers JSONL en Python

Il existe plusieurs façons de lire des fichiers JSONL en Python, chacune adaptée à différents cas d'utilisation. Le module json standard fonctionne pour la plupart des scénarios, pandas est pratique pour l'analyse tabulaire, et les générateurs sont les meilleurs pour les gros fichiers.

L'approche la plus simple utilise le module json intégré de Python. Ouvrez le fichier, itérez ligne par ligne et analysez chaque ligne avec json.loads(). Cela charge tous les enregistrements dans une liste en mémoire.

Lecture basique avec le module json
import json
records = []
with open('data.jsonl', 'r', encoding='utf-8') as f:
for line in f:
line = line.strip()
if line: # Skip empty lines
records.append(json.loads(line))
print(f'Loaded {len(records)} records')
print(records[0])

Si vos données JSONL sont tabulaires (mêmes clés dans chaque enregistrement), pandas peut les lire directement dans un DataFrame avec un seul appel de fonction. C'est le moyen le plus rapide de commencer à analyser des données JSONL structurées.

Lecture avec pandas
import pandas as pd
# Read entire file into a DataFrame
df = pd.read_json('data.jsonl', lines=True)
print(df.head())
print(f'Shape: {df.shape}')
# For large files, read in chunks
chunks = pd.read_json('large.jsonl', lines=True, chunksize=10000)
for chunk in chunks:
# Process each chunk (DataFrame)
print(f'Chunk shape: {chunk.shape}')

Pour les fichiers trop volumineux pour tenir en mémoire, utilisez une fonction génératrice. Elle produit un enregistrement à la fois, maintenant une utilisation mémoire constante quelle que soit la taille du fichier. C'est le pattern recommandé pour les pipelines de données en production.

Pattern générateur pour les gros fichiers
import json
from typing import Iterator, Any
def read_jsonl(path: str) -> Iterator[dict[str, Any]]:
"""Read a JSONL file lazily, yielding one record at a time."""
with open(path, 'r', encoding='utf-8') as f:
for line_num, line in enumerate(f, 1):
line = line.strip()
if not line:
continue
try:
yield json.loads(line)
except json.JSONDecodeError as e:
print(f'Skipping invalid JSON at line {line_num}: {e}')
# Process records one at a time
for record in read_jsonl('large_data.jsonl'):
process(record) # Only one record in memory at a time

Écrire des fichiers JSONL en Python

Écrire des fichiers JSONL est simple : sérialisez chaque enregistrement en chaîne JSON et ajoutez un caractère de retour à la ligne. La règle clé est un objet JSON par ligne, sans virgule finale ni tableau englobant.

Utilisez json.dumps() pour sérialiser chaque enregistrement, puis écrivez-le suivi d'un retour à la ligne. Définissez ensure_ascii=False pour préserver les caractères Unicode comme le chinois, le japonais ou les émoji dans la sortie.

Écriture basique avec le module json
import json
records = [
{"id": 1, "name": "Alice", "age": 30},
{"id": 2, "name": "Bob", "age": 25},
{"id": 3, "name": "Charlie", "age": 35},
]
with open('output.jsonl', 'w', encoding='utf-8') as f:
for record in records:
f.write(json.dumps(record, ensure_ascii=False) + '\n')
print(f'Wrote {len(records)} records to output.jsonl')

Si vos données sont déjà dans un DataFrame pandas, utilisez to_json() avec orient='records' et lines=True pour les exporter directement en JSONL. C'est l'inverse de pd.read_json() avec lines=True.

Écriture avec pandas
import pandas as pd
df = pd.DataFrame([
{"id": 1, "name": "Alice", "age": 30},
{"id": 2, "name": "Bob", "age": 25},
{"id": 3, "name": "Charlie", "age": 35},
])
# Write DataFrame to JSONL
df.to_json('output.jsonl', orient='records', lines=True, force_ascii=False)
print(f'Wrote {len(df)} records to output.jsonl')

Bibliothèques Python pour JSONL

Python offre plusieurs bibliothèques d'analyse JSON avec des caractéristiques de performance différentes. Le choix de la bonne dépend de la taille de vos fichiers et de vos exigences de performance.

json (stdlib)

Intégré

Le module json intégré de Python ne nécessite aucune installation et fonctionne partout. Il suffit pour la plupart des charges de travail JSONL et prend en charge tous les types JSON standard. Les performances sont adéquates pour les fichiers allant jusqu'à quelques centaines de Mo.

orjson

Plus rapide

orjson est la bibliothèque JSON Python la plus rapide, écrite en Rust. Elle offre une analyse et une sérialisation 2 à 10 fois plus rapides par rapport au module json standard. Elle produit des bytes au lieu de chaînes et prend en charge nativement les dataclasses, datetime, numpy et les types UUID.

ujson

Rapide

ujson (UltraJSON) est une bibliothèque JSON en C qui est 2 à 5 fois plus rapide que le module json standard. Son API est presque identique au module json intégré, ce qui en fait un remplacement direct. Un bon compromis entre compatibilité et vitesse.

Streaming de gros fichiers JSONL

Lors du traitement de fichiers JSONL de plusieurs gigaoctets, vous avez besoin d'une approche en streaming qui lit, transforme et écrit les données par lots. Cela maintient une utilisation mémoire constante et fournit un suivi de la progression.

Streaming de gros fichiers JSONL
import json
import sys
def process_large_jsonl(
input_path: str,
output_path: str,
batch_size: int = 1000
) -> int:
"""Stream-process a large JSONL file in batches."""
processed = 0
batch: list[dict] = []
with open(input_path, 'r') as fin, \
open(output_path, 'w') as fout:
for line in fin:
line = line.strip()
if not line:
continue
record = json.loads(line)
# Transform the record
record['processed'] = True
batch.append(record)
if len(batch) >= batch_size:
for r in batch:
fout.write(json.dumps(r) + '\n')
processed += len(batch)
batch.clear()
print(f'\rProcessed {processed} records...', end='')
# Write remaining records
for r in batch:
fout.write(json.dumps(r) + '\n')
processed += len(batch)
print(f'\nDone. Processed {processed} records total.')
return processed
# Usage
process_large_jsonl('input.jsonl', 'output.jsonl', batch_size=5000)

Ce pattern utilise une mémoire constante en traitant les enregistrements par lots de taille fixe. Le paramètre batch_size contrôle le compromis entre l'utilisation mémoire et l'efficacité des E/S. Pour la plupart des systèmes, des lots de 1 000 à 10 000 enregistrements fonctionnent bien. L'indicateur de progression aide à surveiller les tâches de longue durée.

Essayez nos outils JSONL gratuits

Vous ne voulez pas écrire de code ? Utilisez nos outils en ligne gratuits pour visualiser, valider et convertir des fichiers JSONL directement dans votre navigateur.

Travaillez avec des fichiers JSONL en ligne

Visualisez, validez et convertissez des fichiers JSONL jusqu'à 1 Go directement dans votre navigateur. Aucun téléversement requis, 100% privé.

Questions fréquemment posées

JSONL en Python — Lire, écrire, streamer et valider JSON ...