Back to blog
Blog

Comment convertir CSV en JSON, méthodes et considérations

La conversion CSV vers JSON paraît triviale jusqu'à ce que vous rencontriez des données imbriquées, de la coercition de types ou des fichiers volumineux. Voici les quatre méthodes qui fonctionnent en production, et quand utiliser laquelle.

Stéphane JauffretCo-fondateur

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.

Get started

See it in action

Try the interactive demo, or book a call to walk through your specific import workflow with our team.