JSON vers CSV

Convertissez un tableau d'objets JSON en CSV conforme au RFC 4180. Aplatit les objets imbriqués en colonnes à points, gère les enregistrements épars et propose les délimiteurs virgule, point-virgule, tabulation ou pipe, plus un BOM Excel.

Aplatissez des enregistrements dans un tableur. Collez un tableau d'objets et récupérez un CSV avec une ligne d'en-tête. Les objets imbriqués deviennent des noms de colonnes à points, les champs manquants deviennent des cellules vides, et les valeurs contenant le délimiteur sont quotées selon le RFC 4180.

Transformer un arbre en tableau

Le décalage de forme

JSON est un arbre et CSV un rectangle, toute conversion doit donc décider que faire des parties de l'arbre qui ne rentrent pas. La forme qui s'harmonise proprement est un tableau d'objets plats : chaque objet devient une ligne et chaque clé une colonne. Le reste nécessite une règle.

Les objets imbriqués sont le cas facile. {"role": {"team": "core"}} devient une colonne nommée role.team, qui conserve la valeur adressable et est comprise par la plupart des assistants d'import de tableur. Les tableaux imbriqués sont plus difficiles, car les développer changerait le nombre de lignes et dupliquerait silencieusement les données environnantes. Ce convertisseur les conserve comme texte JSON dans une seule cellule, ce qui fait perdre la requêtabilité mais n'invente jamais d'enregistrements absents de la source.

Enregistrements épars et ordre des colonnes

Le JSON réel est rarement uniforme. Un enregistrement possède un nickname, le suivant non ; un champ n'apparaît qu'après une certaine date de migration. Un convertisseur qui tirerait ses colonnes du seul premier objet passerait silencieusement tout le reste sous silence.

La liste de colonnes ici est l'union de chaque clé à travers tous les enregistrements, dans l'ordre de première apparition. Les enregistrements sans un champ reçoivent une cellule vide plutôt que d'être ignorés, si bien que le nombre de lignes correspond toujours à la longueur d'entrée. L'ordre de première apparition est préféré à l'ordre alphabétique car il préserve le regroupement voulu par l'auteur — id et name restent en tête au lieu d'être dispersés.

Guillemets, délimiteurs et Excel

Le RFC 4180 exige qu'un champ soit quoté s'il contient le délimiteur, un double guillemet ou un saut de ligne, et un guillemet incorporé est échappé en le doublant. Cet outil applique cette règle à chaque cellule, y compris l'en-tête, si bien qu'une valeur comme Grace, Jr. ou une adresse multi-ligne survit à un aller-retour via n'importe quel analyseur conforme.

Le choix du délimiteur compte plus qu'il n'y paraît. Dans les régions où la virgule est le séparateur décimal — une grande partie de l'Europe continentale — Excel attend un point-virgule et sinon déverse toute la ligne dans la colonne A. L'option BOM préfixe une marque d'ordre d'octets UTF-8, qui indique à Excel sous Windows de lire le fichier en UTF-8 plutôt qu'en page de code héritée ; sans elle, les noms non-ASCII arrivent corrompus. Ces deux options sont hors du chemin par défaut précisément parce qu'elles cassent d'autres outils, activez-les donc uniquement pour Excel.

Note open-source : implémenté en JavaScript vanilla sans aucune bibliothèque tierce.

FAQ

Quelle forme d'entrée attend-il ?
Un tableau d'objets, où chaque objet est une ligne. Un objet unique est accepté et produit une ligne, mais un tableau de chaînes ou de nombres ne peut pas devenir un tableau.
Comment les objets imbriqués sont-ils gérés ?
Ils sont aplatis en noms de colonnes à points, donc {"role": {"team": "core"}} devient une colonne nommée role.team. Désactivez l'aplatissement pour les conserver comme texte JSON.
Pourquoi les tableaux imbriqués restent-ils en JSON ?
Les développer changerait le nombre de lignes et dupliquerait les champs environnants. Les conserver dans une seule cellule garantit que la sortie possède exactement autant de lignes que les enregistrements en entrée.
Que se passe-t-il quand les enregistrements ont des clés différentes ?
L'en-tête est l'union de toutes les clés à travers tous les enregistrements, dans l'ordre de première apparition, et tout enregistrement sans un champ reçoit une cellule vide. Aucun enregistrement n'est ignoré.
Quand utiliser l'option BOM ?
Uniquement pour Excel sous Windows. La marque d'ordre d'octets lui indique de lire le fichier en UTF-8 ; sans elle, les caractères non-ASCII sont mal lus. D'autres outils peuvent afficher le BOM comme caractères parasites.
Pourquoi mon fichier s'ouvre-t-il dans une seule colonne dans Excel ?
Excel suit le séparateur de liste de votre région. Dans les régions utilisant la virgule comme séparateur décimal, il attend un point-virgule, basculez donc le délimiteur sur point-virgule et rouvrez.