CSV et JSON répondent à des problèmes différents. CSV stocke des données tabulaires plates pour les humains et les tableurs. JSON stocke des données structurées et hiérarchiques pour les applications et les API. La conversion entre les deux est un besoin constant dans les workflows modernes : intégration avec une API REST, alimentation d'une base NoSQL, exposition d'un jeu de données à un frontend web.
Pour des fichiers simples, la conversion est triviale. Pour des données réelles issues de systèmes réels, c'est rarement aussi propre que les exemples de démonstration le laissent croire. Ce guide couvre quatre méthodes pour convertir CSV en JSON, quand chacune convient, et les problèmes à anticiper en cours de route.
Avant de convertir, préparez votre CSV
La plupart des échecs de conversion viennent du CSV lui-même, pas de l'outil de conversion. Quelques minutes de préparation évitent des heures de débogage.
Vérifiez que les en-têtes de colonnes sont propres. Chaque colonne doit avoir un nom unique et descriptif. Pas de caractères spéciaux, pas de doublons, pas d'espaces. Si votre CSV contient « First Name », renommez-le en « first_name » dans la ligne d'en-tête avant la conversion. Les noms deviendront des clés JSON, et les clés contenant des espaces ou des caractères spéciaux sont pénibles à manipuler dans le code.
Vérifiez les lignes malformées. Virgules en trop, lignes vides, lignes avec un nombre de champs différent de l'en-tête : tout cela casse la conversion. Un scan rapide dans VS Code ou un validateur comme csvlint détecte la plupart des problèmes.
Vérifiez l'encodage. UTF-8 est le standard pour JSON. Si votre CSV utilise un autre encodage (Windows-1252, ISO-8859-1), convertissez-le en UTF-8 au préalable, sinon les caractères accentués et spéciaux deviennent du mojibake dans la sortie.
Aplatissez les structures embarquées. CSV est plat par
conception, mais il arrive que l'on entasse plusieurs valeurs
dans une même cellule, comme ["item1", "item2"] ou
tag1;tag2;tag3. Décidez comment les gérer avant de convertir :
soit en les séparant dans des colonnes distinctes, soit en les
parsant pendant la conversion pour produire de vrais tableaux
JSON.
Méthode 1 : Python avec pandas
Pour les développeurs et les équipes data, pandas est le choix par défaut. Il gère l'encodage, les lignes malformées et les fichiers volumineux mieux que presque toute alternative, et l'API est concise.
import pandas as pd
df = pd.read_csv('input.csv')
df.to_json('output.json', orient='records', indent=2)
L'argument orient='records' produit un tableau d'objets, ce
qui est le format attendu par la plupart des API et des
applications :
[
{"name": "Jane Doe", "email": "jane@example.com", "age": 30},
{"name": "John Smith", "email": "john@example.com", "age": 45}
]
D'autres valeurs d'orient existent pour des besoins
spécifiques. orient='index' indexe par numéro de ligne, utile
pour les dataframes avec des index significatifs.
orient='split' préserve séparément les métadonnées de
colonnes et d'index. Pour la plupart des scénarios d'API,
records est la bonne réponse.
Un piège à surveiller : pandas infère les types à partir des
données, ce qui est généralement souhaitable mais parfois
incorrect. Les numéros de téléphone avec des zéros en tête sont
lus comme des entiers, supprimant les zéros. Les identifiants
de compte qui ressemblent à des flottants sont convertis. Pour
les fichiers où la préservation exacte des types est critique,
passez dtype=str à read_csv et gérez la conversion de types
explicitement.
Méthode 2 : JavaScript natif ou Node.js
Pour les projets web où la conversion se fait dans le navigateur ou dans un backend Node, le JavaScript natif suffit souvent, sans ajouter de dépendance.
const csv = fs.readFileSync('input.csv', 'utf-8');
const [header, ...rows] = csv.trim().split('\n');
const keys = header.split(',');
const json = rows.map(row => {
const values = row.split(',');
return Object.fromEntries(keys.map((k, i) => [k, values[i]]));
});
fs.writeFileSync('output.json', JSON.stringify(json, null, 2));
Cela fonctionne pour des fichiers propres. Cela casse dès que
le CSV contient des valeurs entre guillemets, des virgules
échappées ou des cellules multilignes. Pour tout ce qui
dépasse les cas triviaux, utilisez une bibliothèque comme
papaparse ou csv-parse qui respecte la spécification CSV.
import Papa from 'papaparse';
const result = Papa.parse(csv, {
header: true,
dynamicTyping: true,
skipEmptyLines: true
});
const json = JSON.stringify(result.data, null, 2);
dynamicTyping: true convertit automatiquement les nombres et
les booléens, ce qui est généralement utile mais pas toujours.
Même piège que pandas : les zéros en tête disparaissent.
Méthode 3 : Convertisseurs en ligne
Pour les conversions ponctuelles sans écrire de code, les outils en ligne conviennent. csvjson.com, convertcsv.com et json-csv.com sont les choix courants.
Ils sont adaptés aux données non sensibles, aux petits fichiers et aux tâches ponctuelles. Ne les utilisez pas pour des données contenant des informations personnelles, des données financières ou des informations critiques pour l'entreprise. Le fichier est envoyé sur un serveur tiers, et il n'y a aucune garantie standard sur la durée de stockage ou les personnes qui peuvent y accéder.
Pour toute donnée sensible, utilisez une méthode locale (pandas, Node) ou un outil que vous contrôlez.
Méthode 4 : Excel via Power Query
Excel peut gérer la conversion CSV vers JSON via Power Query, bien que le chemin soit indirect. Chargez le CSV avec Obtenir des données, transformez selon vos besoins, puis exportez. L'intérêt principal est lorsque la conversion doit s'inscrire dans un workflow plus large basé sur Excel.
Pour une pure conversion CSV vers JSON, c'est la méthode la plus lourde. Elle ne se justifie que lorsque l'équipe travaille déjà dans Excel et ne souhaite pas introduire Python ou un autre outil.
Les cas plus complexes : les structures imbriquées
Les exemples ci-dessus supposent un mapping plat un-pour-un entre les lignes CSV et les objets JSON. Les conversions réelles nécessitent souvent de produire du JSON imbriqué à partir de données CSV plates.
Imaginez un CSV avec les colonnes order_id, item_name, quantity, price, où chaque commande comporte plusieurs lignes
d'articles. Le JSON souhaité ressemble à ceci :
[
{
"order_id": "A001",
"items": [
{"item_name": "Widget", "quantity": 2, "price": 10},
{"item_name": "Gadget", "quantity": 1, "price": 25}
]
}
]
Produire ce résultat nécessite de regrouper les lignes par
order_id et d'imbriquer les articles. pandas le gère avec
groupby et un peu de restructuration, mais la logique est
spécifique à chaque cas. Les convertisseurs en ligne ne gèrent
pas cela. Pour les tâches ponctuelles, un petit script est
généralement plus rapide que d'essayer de forcer un outil
générique.
Quand ce schéma se répète sur de nombreuses sources avec des conventions de nommage différentes, la conversion devient un problème de mapping de données, pas un problème de format.
Pourquoi convertir CSV en JSON
JSON s'impose dès que le consommateur est une application plutôt qu'un tableur. Quatre raisons courantes.
Intégration API. La plupart des API REST acceptent et retournent du JSON. Si vous devez alimenter une API avec un CSV, la conversion est votre passerelle.
Frontends web et mobile. Les frameworks JavaScript comme React et Vue travaillent nativement avec JSON. Fournir un CSV à un frontend l'oblige à parser le fichier, alors que JSON est consommable immédiatement.
Bases NoSQL. MongoDB, CouchDB, DynamoDB et les systèmes similaires stockent des documents de type JSON. L'import depuis CSV passe généralement par un intermédiaire JSON.
Configuration et automatisation. Des outils comme Ansible, Terraform et d'innombrables pipelines CI consomment du JSON ou du YAML, jamais du CSV.
Quand la conversion n'est pas le vrai problème
Si vous convertissez régulièrement le même format de CSV depuis la même source pour le même usage en aval, la conversion n'est pas le problème. Le problème, c'est qu'un transfert de fichier manuel fait partie de votre workflow.
La bonne réponse dans ces cas-là n'est pas un script de conversion plus rapide. C'est de faire transiter les données par une API ou une couche d'import dédiée qui gère la traduction de format automatiquement. Nous avons détaillé cette évolution pour ceux dont l'équipe consacre un temps notable aux conversions récurrentes.
Pour les conversions véritablement ponctuelles, les méthodes ci-dessus constituent votre boîte à outils.
Conclusion
La conversion CSV vers JSON est un travail de cinq minutes quand le CSV est propre et la structure JSON est plate. Cela devient un vrai sujet d'ingénierie quand les données ont des structures imbriquées, que le CSV source est désordonné, ou que la conversion doit fonctionner de manière fiable à grande échelle. Les méthodes de ce guide couvrent les cas courants. Au-delà, le problème n'est généralement pas la conversion elle-même, mais ce que les données traversent après.
