Comment convertir du JSON en CSV : aplatir des tableaux d'objets en lignes et colonnes
Publié le 18/06/2025 · 4 min de lecture · Outils pour développeurs
Daniel Okonkwo — Développeur front-end et rédacteur Tech chez Allin
Performance web · Formats de fichiers
Vérifié à partir de 2 sources
Pour convertir du JSON en CSV, pars d'un tableau d'objets. Rassemble l'union de toutes les clés pour former la ligne d'en-tête, puis écris une ligne par objet en lisant chaque champ dans l'ordre des en-têtes. Échappe toute valeur contenant une virgule, un guillemet double ou un saut de ligne en l'entourant de guillemets doubles et en doublant les guillemets internes. Les objets et tableaux imbriqués doivent d'abord être aplatis en colonnes à notation par point, comme address.city.
Un guide pratique pour transformer un tableau JSON d'objets en fichier CSV propre, avec l'aplatissement des champs imbriqués et la gestion des cas limites.
Pourquoi la forme de ton JSON compte
Le CSV est un format plat en deux dimensions : des lignes et des colonnes, rien de plus. Le JSON est un arbre qui peut imbriquer des objets dans des objets et des tableaux dans des tableaux. Le cas idéal pour la conversion est un tableau d'objets au premier niveau, où chaque objet devient une ligne et chaque clé une colonne. Tout ce qui est plus profond doit être remodelé avant de tenir dans une grille.
Comme des objets différents peuvent porter des clés différentes, la ligne d'en-tête doit être l'union de toutes les clés rencontrées, pas seulement celles du premier objet. Si tu ne lis que le premier enregistrement, les colonnes suivantes disparaissent silencieusement et le fichier se désaligne.
Aplatir les objets et tableaux imbriqués
L'astuce classique est la notation par point. Un objet comme {"address":{"city":"Lagos"}} devient une colonne nommée address.city contenant la valeur Lagos. L'imbrication peut être aussi profonde que voulu : user.address.city est parfaitement valide. Les tableaux sont indexés par position, donc tags contenant ["api","web"] devient deux colonnes, tags.0 et tags.1.
L'aplatissement fonctionne bien quand les tableaux sont courts et de longueur fixe. Quand un tableau peut grandir, les colonnes indexées explosent : un enregistrement à cinquante étiquettes produit cinquante colonnes. Dans ce cas, il est souvent plus propre de conserver le tableau comme une seule chaîne jointe, comme "api;web;csv", ou de scinder les données dans une seconde table liée.
Les cas limites qui cassent les convertisseurs naïfs
L'échec le plus courant concerne l'échappement. Si une valeur contient le séparateur (souvent une virgule), un guillemet double ou un saut de ligne, elle doit être entourée de guillemets doubles, et tout guillemet double interne doit être doublé. Ainsi la valeur She said "hi" devient "She said ""hi""". L'ignorer corrompt toutes les lignes suivantes.
Autres pièges : null contre chaîne vide (les deux donnent en général une cellule vide), booléens et nombres qu'un tableur peut réinterpréter (un code à zéro initial comme 007 peut perdre ses zéros), et l'encodage. Écris toujours en UTF-8, et envisage une marque d'ordre des octets initiale si le fichier doit s'ouvrir proprement dans d'anciens tableurs.
Questions fréquentes
- Que faire si mon JSON est un objet unique, pas un tableau ?
- Place-le dans un tableau pour obtenir un CSV d'une ligne. Si tu préfères chaque clé sur sa propre ligne, transpose-le en deux colonnes clé,valeur.
- Quel séparateur utiliser, virgule ou point-virgule ?
- La virgule est le séparateur par défaut du standard CSV. Certains réglages régionaux de tableur attendent un point-virgule ; si tes valeurs contiennent déjà des virgules, un point-virgule ou une tabulation réduit l'échappement.
- Comment empêcher les zéros initiaux de disparaître ?
- Les zéros sont bien dans le fichier CSV ; c'est le tableur qui les supprime en traitant la colonne comme un nombre. Importe la colonne en tant que texte, sinon le tableur la reformatera à l'ouverture.
- Puis-je reconvertir le CSV en JSON à l'identique ?
- En partie. Les colonnes plates se reconvertissent proprement, mais les clés à notation par point doivent être ré-imbriquées et le CSV perd les types : nombres et booléens reviennent en chaînes tant que tu ne les réanalyses pas.
Articles qui pourraient t'intéresser
Tous les guides →Outils similaires
Sources
Tu as repéré une erreur dans cet article ?