Comment convertir du JSON en CSV sans rien perdre
Convertir du JSON en CSV consiste à transformer un tableau d’objets en tableur : chaque objet devient une ligne, chaque clé devient une colonne. Sur le papier c’est trivial. En pratique, la règle qui casse la moitié des scripts maison, c’est l’échappement : dès qu’une valeur contient une virgule, un guillemet ou un saut de ligne, il faut l’entourer de guillemets et doubler les guillemets internes, sinon le fichier CSV obtenu est simplement invalide et s’ouvre de travers dans un tableur.
Pourquoi le CSV compte encore
Le JSON est le format naturel des API et des bases de données orientées documents. Le CSV, lui, reste le format que comprennent Excel, Google Sheets, la plupart des outils de BI et une bonne partie des pipelines d’import de vos partenaires ou clients. Dès qu’un humain doit ouvrir des données dans un tableur, ou qu’un système tiers n’accepte que des fichiers plats, le JSON doit passer par cette conversion. C’est un besoin qui revient constamment : extraire une réponse d’API pour l’envoyer à un collègue, préparer un export pour la compta, ou transformer un dump de base de données en quelque chose qu’on peut filtrer et trier à la souris.
Un exemple concret, ligne par ligne
Prenons ce tableau JSON, trois produits avec des champs identiques :
[
{ "sku": "A100", "product": "Wireless Mouse, Black", "price": 19.99, "in_stock": true },
{ "sku": "A101", "product": "17\" Laptop Stand", "price": 42.5, "in_stock": false },
{ "sku": "A102", "product": "USB-C Cable", "price": 8.99, "in_stock": true }
]
La conversion produit ce CSV :
sku,product,price,in_stock
A100,"Wireless Mouse, Black",19.99,true
A101,"17"" Laptop Stand",42.5,false
A102,USB-C Cable,8.99,true
Les en-têtes de colonnes viennent des clés, dans l’ordre où elles apparaissent la première fois qu’on les rencontre en parcourant le tableau (sku, product, price, in_stock). Regardez maintenant ce qui se passe valeur par valeur.
Sur la première ligne, Wireless Mouse, Black contient une virgule. Sans précaution, cette virgule serait interprétée comme un séparateur de colonne et casserait la ligne en deux cellules au lieu d’une. La règle RFC 4180 (la norme qui définit le format CSV) impose donc d’entourer toute la valeur de guillemets doubles dès qu’elle contient une virgule, un guillemet ou un saut de ligne : "Wireless Mouse, Black".
Sur la deuxième ligne, 17" Laptop Stand contient un guillemet double littéral (le symbole pouces). Ici deux règles s’appliquent en même temps : la valeur entière est entourée de guillemets parce qu’elle contient un caractère spécial, et le guillemet interne est doublé pour ne pas être confondu avec le guillemet de fermeture. Le résultat est "17"" Laptop Stand" : guillemet ouvrant, 17, deux guillemets consécutifs qui représentent le seul guillemet d’origine, Laptop Stand, guillemet fermant. C’est exactement ce mécanisme de doublement qui permet à un lecteur CSV de faire la différence entre “fin de la valeur” et “il y a un guillemet dans le texte”.
Sur la troisième ligne, USB-C Cable ne contient ni virgule, ni guillemet, ni saut de ligne : elle passe telle quelle, sans aucun guillemet ajouté. C’est le comportement attendu : l’échappement n’est appliqué que quand il est nécessaire, pas systématiquement, pour garder le fichier lisible.
Un second cas mérite d’être vu : que se passe-t-il quand les objets du tableau n’ont pas exactement les mêmes clés ? Prenez [{ "name": "Alice", "city": "Lyon" }, { "name": "Bob" }]. Les en-têtes retenus sont l’union de toutes les clés vues sur l’ensemble du tableau, donc name,city, et pas seulement celles du premier objet. La ligne de Bob, qui n’a pas de city, reçoit une cellule vide pour cette colonne plutôt que de décaler les colonnes suivantes ou de provoquer une erreur : Bob,. C’est un point sur lequel certains convertisseurs artisanaux se plantent, en ne regardant que les clés du tout premier objet et en perdant silencieusement les colonnes supplémentaires apparues plus loin dans le tableau.
Essayez avec vos propres données
Erreurs courantes
Les objets imbriqués deviennent [object Object]. Si une valeur est elle-même un objet, par exemple { "name": "Alice", "address": { "city": "Lyon", "zip": "69000" } }, la conversion en chaîne de caractères ne produit pas un contenu lisible : elle affiche littéralement le texte [object Object] dans la cellule, et l’information est perdue. La correction consiste à aplatir la structure avant de convertir, en remplaçant la clé address par deux clés de premier niveau : address_city: "Lyon" et address_zip: "69000". Le principe général : le convertisseur ne sait traiter que des objets plats, à vous de faire descendre les champs imbriqués au niveau racine avant de coller le JSON.
Un tableau de valeurs devient une seule cellule séparée par des virgules. Une valeur comme "tags": ["red", "blue"] n’est pas éclatée en plusieurs colonnes. Elle est convertie en chaîne par simple jointure des éléments avec des virgules, sans crochets : red,blue. Et comme cette chaîne contient maintenant une virgule, la règle d’échappement vue plus haut s’applique et la cellule finale ressemble à "red,blue". Le résultat est correct au sens CSV (rien n’est cassé, le fichier reste valide), mais si vous vous attendiez à une colonne tags_1, tags_2 par tag, ce n’est pas ce que vous obtenez : tout finit aplati dans une seule cellule texte.
Le piège du séparateur dans Excel version française. La sortie de cet outil utilise la virgule comme séparateur de colonnes, conformément au standard CSV le plus répandu. Le problème, c’est qu’Excel en version française (et plus largement dans la plupart des locales européennes, où la virgule sert déjà de séparateur décimal) attend par défaut un point-virgule comme séparateur de liste. Résultat concret : ouvrir directement ce fichier CSV en double-cliquant dessus dans un Excel français fait souvent atterrir toutes les colonnes regroupées dans la cellule A, séparées par des virgules visibles au lieu d’être réparties. Deux façons de corriger ça sans toucher au fichier : utiliser le menu Données puis Convertir, ou Texte en colonnes, en choisissant explicitement la virgule comme délimiteur ; ou changer le séparateur de liste dans les paramètres régionaux de Windows (Panneau de configuration, Région, Paramètres supplémentaires). C’est un désagrément très courant pour qui travaille en français, et qui n’a rien à voir avec un bug du fichier lui-même : le CSV est parfaitement valide, c’est juste qu’Excel devine le mauvais délimiteur par défaut.
Oublier les crochets autour d’un objet unique. L’outil attend un tableau, même s’il ne contient qu’un seul élément. Coller { "name": "Alice" } seul échoue : il faut l’écrire [{ "name": "Alice" }]. C’est une erreur de syntaxe fréquente quand on copie-colle un objet unique extrait d’une réponse d’API sans remettre les crochets englobants.
Questions fréquentes
Le convertisseur envoie-t-il mes données sur un serveur ? Non. Toute la conversion se fait localement dans votre navigateur, en JavaScript. Vos données JSON ne quittent jamais votre appareil, ce qui le rend utilisable même avec des données sensibles.
Que se passe-t-il si mon JSON n’est pas un tableau valide ? L’outil affiche un message d’erreur clair au lieu de planter. Deux cas typiques : un JSON mal formé (guillemet manquant, virgule en trop) ou un objet unique non entouré de crochets. Dans les deux cas, corrigez la syntaxe et recollez.
Puis-je choisir un séparateur point-virgule au lieu d’une virgule ? Non, la sortie utilise uniquement la virgule, conformément au standard CSV le plus courant (RFC 4180). Si votre Excel en version française attend un point-virgule, utilisez la fonction Texte en colonnes d’Excel en spécifiant la virgule comme délimiteur, ou changez le séparateur de liste dans les paramètres régionaux de votre système, plutôt que de changer le fichier.
Comment gérer un champ JSON qui contient un objet imbriqué ?
Aplatissez-le avant de convertir. Remplacez une clé comme address (qui contient elle-même city et zip) par deux clés distinctes au premier niveau, par exemple address_city et address_zip. Sans cet aplatissement, la cellule correspondante affichera le texte inutile [object Object] au lieu de la donnée réelle.
Puis-je partager cet outil avec mes données déjà collées ? Oui, sur la page complète de l’outil, l’URL se met à jour automatiquement pendant que vous tapez, ce qui permet de partager un lien contenant vos valeurs. Ce comportement ne s’applique pas au widget intégré dans cet article, uniquement à la page dédiée de l’outil.