Aller au contenu principal
Tooletto

JSON vers CSV

Convertissez un tableau JSON en CSV pour Excel, Google Sheets ou un import de base de données. Les objets imbriqués sont aplatis en colonnes à points, et les enregistrements aux formes différentes sont combinés en un seul jeu de colonnes.

  • Les fichiers ne quittent jamais votre appareil
  • Gratuit, sans inscription
  • Aucun filigrane
  • Fonctionne hors ligne une fois chargé
Loading tool…

Comment utiliser JSON vers CSV

  1. 1

    Collez votre JSON

    Un tableau d'objets fonctionne le mieux — l'outil vous dira s'il a besoin d'une forme différente.

  2. 2

    Choisissez vos options

    Choisissez un délimiteur, et si les objets imbriqués doivent être aplatis en colonnes à points.

  3. 3

    Téléchargez le CSV

    Enregistrez-le et ouvrez-le directement dans Excel ou Google Sheets.

Pourquoi JSON et CSV sont des formes de données fondamentalement différentes

Le JSON est construit pour représenter des données arbitrairement imbriquées en forme d'arbre — objets dans des objets, tableaux dans des objets, valeurs de types réellement différents côte à côte — tandis que le CSV ne peut représenter qu'une table plate et uniforme : lignes et colonnes, chaque ligne avec le même ensemble de colonnes, chaque cellule une seule valeur plate. Convertir de la première forme à la seconde signifie nécessairement prendre des décisions sur comment aplatir quelque chose qui ne rentre pas naturellement en lignes et colonnes, ce qui est là où réside l'essentiel de la vraie complexité de ce type de conversion — pas dans la lecture de la syntaxe JSON elle-même, qui est directe, mais dans la décision de ce qu'une ligne de tableur devrait même signifier pour des données qui n'ont jamais été tabulaires au départ.

Comment les objets imbriqués deviennent des noms de colonnes à points

Un objet imbriqué comme `{"user": {"name": "Ada", "id": 42}}` n'a aucune colonne unique évidente en laquelle devenir dans une table plate, donc il est aplati en deux colonnes séparées — `user.name` et `user.id` — avec la notation par points préservant exactement d'où vient chaque valeur dans la structure d'origine. C'est une convention largement reconnue précisément car elle est réversible : une colonne nommée `user.name` décrit sans ambiguïté un chemin de retour vers une structure imbriquée, ce qui compte si le CSV doit un jour être reconverti en JSON ou importé dans un système comprenant les chemins à points comme champs imbriqués.

Les tableaux imbriqués sont gérés différemment, et délibérément ainsi : plutôt que de faire exploser un tableau en lignes supplémentaires — ce qui changerait le nombre de lignes de la table selon combien d'éléments imbriqués se trouvent dans un enregistrement, un effet secondaire réellement surprenant et souvent non désiré — une valeur de tableau est sérialisée en texte JSON dans une seule cellule. Le nombre de lignes reste prévisible et correspond exactement au nombre d'enregistrements d'entrée, ce qui est presque toujours ce que veut réellement quelqu'un convertissant vers un tableur, au prix que cette cellule nécessite une analyse supplémentaire si son contenu est nécessaire individuellement.

Gérer un mélange d'enregistrements qui n'ont pas tous les mêmes champs

Les vraies réponses d'API et le JSON assemblé à la main contiennent fréquemment des enregistrements où tous les objets n'ont pas des clés identiques — un champ optionnel présent dans certains enregistrements et absent d'autres, ou un schéma qui a évolué dans le temps donc les enregistrements plus anciens et plus récents diffèrent légèrement. Le CSV ne peut pas représenter cette variation directement, chaque ligne devant s'aligner sur le même ensemble fixe de colonnes ; un programme lisant un fichier CSV n'a aucun moyen de savoir qu'il « manque » une colonne à une ligne sauf si chaque ligne a explicitement une cellule pour elle. La solution est de calculer l'union de chaque clé vue dans chaque enregistrement, dans l'ordre où chaque clé a été rencontrée en premier, et de remplir une cellule vide pour tout enregistrement auquel manque un champ donné — ainsi la forme reste cohérente dans tout le fichier sans sacrifier silencieusement les colonnes d'aucun enregistrement ni désaligner des valeurs dans la mauvaise colonne.

Questions fréquentes

Quelle forme de JSON attend-il ?

Un tableau d'objets — la forme que renvoie presque toute API. Un seul objet est traité comme une table d'une ligne. Les tableaux de valeurs primitives produisent un fichier à une seule colonne.

Comment les objets imbriqués sont-ils gérés ?

Ils sont aplatis en noms de colonnes à points, donc `{"user":{"name":"Ada"}}` devient une colonne nommée `user.name`. Les tableaux imbriqués sont écrits comme du texte JSON dans une seule cellule plutôt que d'exploser en lignes supplémentaires, car changer le nombre de lignes n'est presque jamais ce que veut un export vers tableur.

Que se passe-t-il si mes enregistrements ont des champs différents ?

L'ensemble de colonnes est l'union de chaque clé rencontrée, dans l'ordre où elle a été vue en premier. Les enregistrements auxquels manque un champ obtiennent une cellule vide plutôt que d'être écartés ou désalignés.

Pourquoi Excel abîme-t-il mon CSV ?

Généralement le délimiteur : Excel dans de nombreuses configurations européennes attend des points-virgules, pas des virgules. Changez l'option de délimiteur. Excel reformate aussi les longs ID numériques en notation scientifique à l'ouverture — importer via Données → À partir du texte évite cela.

Les guillemets et virgules dans les valeurs sont-ils échappés ?

Oui, selon la RFC 4180. Les champs contenant le délimiteur, un guillemet ou un saut de ligne sont enveloppés de guillemets, et les guillemets internes sont doublés — donc le fichier se convertit correctement dans les deux sens via tout lecteur conforme.