Le JSON est un arbre de données fait d'objets, de listes, de nombres et de chaînes. Le CSV est un tableau et rien d'autre, sans formules ni mise en forme de cellule. Python se tient entre les deux, et cette page dit exactement ce qui arrive à un fichier JSON en route vers le CSV.
Ce qui s'exécute quand un fichier JSON devient un CSV
Python et sa bibliothèque standard, sur une machine que nous louons et que nous surveillons. Votre fichier JSON est envoyé une fois, Python s'exécute une fois, le fichier CSV revient, et aucun des deux fichiers n'est conservé. JSON vers CSV fait partie des 3649 paires sur lesquelles ce moteur a été sondé avec un vrai fichier, et c'est pour cela que cette page existe quand celles que la sonde n'a pas su prouver n'existent pas.
Ce qui survit du fichier JSON dans le fichier CSV
Chaque valeur, et les noms que vous leur avez donnés. Cette paire lit votre JSON en mémoire et le réécrit en CSV : aucun champ n'est renommé, réordonné en autre chose ni discrètement oublié. Le moteur relit sa propre sortie, compte les éléments et refuse le résultat si le compte a bougé.
Chaque champ de chaque enregistrement, en colonne. La ligne d'en-tête est bâtie à partir des clefs, et un enregistrement auquel il manque une clef reçoit une cellule vide plutôt qu'une ligne décalée.
Les valeurs telles quelles. Les nombres ne sont pas remis en forme, les chaînes ne sont pas rognées, et rien n'est converti de force : ce qui entre ressort.
Ce que la conversion JSON vers CSV vous coûte
Toute imbrication. Une cellule de tableau porte une valeur, si bien qu'un enregistrement dont un champ contient un objet ou une liste n'a nulle part où le mettre. Cette conversion est refusée plutôt que devinée : aplatir reviendrait à inventer une convention de nommage que vous n'avez pas choisie, et un fichier bâti sur une convention inventée est un piège pour qui le lira ensuite.
Les types. Un CSV n'a aucune notion de nombre, de booléen ni de valeur nulle : tout devient du texte, et c'est celui qui le lit qui décide de ce que cela veut dire. C'est le prix d'un format que tout sait ouvrir.
D'où viennent les fichiers JSON et CSV
CSV. Tout l'écrit et rien ne s'accorde dessus. Il existe une RFC, la 4180, et elle décrit l'usage courant plutôt qu'elle ne le commande : guillemets, échappements et fins de ligne varient d'un producteur à l'autre. Un CSV est le plus petit dénominateur commun, ce qui explique à la fois qu'il soit partout et qu'il surprenne.
Si un modèle doit lire le fichier CSV
La structure est ce qui subsiste du fichier JSON, et la structure est ce dont un modèle a besoin. JSON en entrée, CSV en sortie, avec l'arbre des titres intact plutôt qu'aplati en un seul long paragraphe.
JSON vers CSV, mesuré plutôt que promis
En passant JSON vers CSV sur le moteur réel avec un vrai fichier, Python a écrit 39 octets au format CSV en moins d'un dixième de seconde, machine par ailleurs au repos. C'est un fichier JSON un jour donné et non une moyenne, et c'est pourquoi le nombre est donné avec le fichier qui l'a produit.
Le verdict JSON vers CSV a été obtenu par l'analyse de la donnée relue et la recherche d'un mot témoin, c'est-à-dire que la sortie a été relue et reconnue. Le contrôle employé compte, parce qu'ils ne prouvent pas tous la même chose, et un code de statut 200 ne prouve strictement rien sur ce que le fichier CSV contient.
Le même fichier JSON, envoyé ailleurs
Les autres sorties que la sonde a mesurées à partir d'un fichier JSON, pour que le coût du choix du format CSV se lise face à quelque chose. Les tailles ne se comparent pas d'un moteur à l'autre, chaque famille ayant été sondée avec son propre fichier témoin JSON.
JSON vers MD : 266 octets en moins d'un dixième de seconde, vérifié par un aller-retour pandoc.
JSON vers DOCX : 10 106 octets en 0,1 secondes, vérifié par un aller-retour pandoc.
JSON vers EPUB : 5 035 octets en 0,1 secondes, vérifié par un aller-retour pandoc.
JSON vers TXT : 264 octets en moins d'un dixième de seconde, vérifié par la relecture du texte.
JSON vers HTML : 4 018 octets en 0,1 secondes, vérifié par un aller-retour pandoc.
JSON vers RTF : 687 octets en 0,1 secondes, vérifié par un aller-retour pandoc.
Les autres routes vers CSV, et ce qu'elles ont mesuré
Parmi les routes publiées vers CSV, JSON est la quatrième plus grosse sortie des 5 mesurées. Les fichiers témoins diffèrent : ce classement porte sur la sonde et non sur votre document.
XLS vers CSV : 89 octets en 0,9 secondes.
ODS vers CSV : 89 octets en 1,1 secondes.
YAML vers CSV : 39 octets en moins d'un dixième de seconde.
XLSX vers CSV : 89 octets en 1,1 secondes.
Ce que nous ne prétendrons pas sur JSON vers CSV
Un fichier JSON de plus de 25 Mo est refusé avant la fin de l'envoi plutôt qu'après, pour que vous n'attendiez pas un refus.
Une conversion JSON vers CSV qui dépasse 50 secondes est tuée, et le processus Python avec elle. Une exécution abandonnée resterait posée sur l'un des deux cœurs de la machine jusqu'à ce que quelqu'un le remarque.
Que cette paire fonctionne dépend de vos données et pas seulement des deux formats. Un JSON dont la forme ne convient pas au CSV est refusé par un 422 et un message qui nomme ce qui manque, ce qui est différent de « ce format n'est pas pris en charge » et se dit différemment exprès. Le refus est immédiat et ne coûte rien.
Une note sur le mot JSON, parce qu'il veut dire deux choses ici. Convertir du Markdown ou un fichier Word en JSON donne l'arbre syntaxique de pandoc, qui décrit le document. Convertir un JSON donne vos données. Les deux sont du JSON et ce ne sont pas la même chose ; le site choisit d'après la source, seule façon de les distinguer.
Le XML n'est pas de cette famille, et c'est l'absence évidente. Il n'a pas de correspondance manifeste avec ce modèle : attributs contre éléments, texte mêlé, ordre significatif. Chaque conversion demanderait d'inventer une convention, et une convention inventée est un piège pour qui lira le fichier ensuite. La famille s'en tient à ce qui se traduit sans choix arbitraire.
Un fichier JSON à la fois, choisi dans le navigateur. Il n'y a rien d'autre à régler et rien d'autre à proposer.
JSON vers CSV : les questions que l'on pose
Qu'est-ce qui convertit vraiment mon fichier JSON en CSV ?
C'est Python qui s'en charge, avec sa bibliothèque standard, sur une machine que nous louons et que nous surveillons. Ni astuce de navigateur, ni service d'un tiers : le fichier JSON est envoyé une fois, Python s'exécute une fois, le CSV revient, et aucun des deux fichiers n'est conservé ensuite.
Combien de temps prend une conversion JSON vers CSV ?
Sur le fichier utilisé par la sonde, Python a mis moins d'un dixième de seconde et écrit 39 octets de CSV. C'est une mesure réelle sur un fichier JSON réel, pas une moyenne et pas une promesse sur le vôtre : un JSON plus gros prend plus longtemps, et au-delà de 50 secondes l'exécution est arrêtée.
Qu'est-ce que je perds en passant du JSON au CSV ?
Celle qu'il faut connaître en premier : toute imbrication. Une cellule de tableau porte une valeur, si bien qu'un enregistrement dont un champ contient un objet ou une liste n'a nulle part où le mettre. Cette conversion est refusée plutôt que devinée : aplatir reviendrait à inventer une convention de nommage que vous n'avez pas choisie, et un fichier bâti sur une convention inventée est un piège pour qui le lira ensuite.
Pourquoi mon fichier a-t-il été refusé ?
Presque toujours parce qu'un champ contient un objet ou une liste, et qu'une cellule de tableau porte une valeur. La réponse nomme le champ et la ligne. L'aplatir reviendrait à inventer une convention de nommage que vous n'avez pas choisie : l'outil refuse plutôt que de deviner.
Qu'arrive-t-il à un enregistrement auquel il manque un champ ?
Il reçoit une cellule vide dans cette colonne. L'en-tête est bâti à partir de toutes les clefs vues sur tous les enregistrements : aucune ligne n'est donc jamais décalée par un champ manquant.
Mes données sont-elles envoyées ailleurs ?
Non. Elles vont sur une machine que nous louons et que nous surveillons, sont lues par Python et réécrites, et aucun des deux fichiers n'est conservé. Il n'y a aucun service tiers dans cette famille et aucun modèle qui lise vos données.
La conversion JSON vers CSV est-elle gratuite ?
Il y a une franchise gratuite chaque mois, et une conversion JSON vers CSV coûte un demi-crédit dessus. Quand la franchise est épuisée, l'outil le dit et s'arrête, plutôt que de vous remettre discrètement un CSV moins bon.