Le CSV est un tableau et rien d'autre, sans formules ni mise en forme de cellule. Le JSON est un arbre de données fait d'objets, de listes, de nombres et de chaînes. Python se tient entre les deux, et cette page dit exactement ce qui arrive à un fichier CSV en route vers le JSON.
Ce qui s'exécute quand un fichier CSV devient un JSON
Python et sa bibliothèque standard, sur une machine que nous louons et que nous surveillons. Votre fichier CSV est envoyé une fois, Python s'exécute une fois, le fichier JSON revient, et aucun des deux fichiers n'est conservé. CSV vers JSON 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 CSV dans le fichier JSON
Chaque valeur, et les noms que vous leur avez donnés. Cette paire lit votre CSV en mémoire et le réécrit en JSON : 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 ligne devient un objet, avec votre ligne d'en-tête pour clefs. Un CSV de deux cents lignes arrive en liste de deux cents objets, ce qu'un programme s'attend à parcourir.
L'ordre des colonnes, comme ordre des clefs. Il ne porte aucun sens en JSON et il est gardé quand même, parce qu'un fichier que vous pouvez lire à côté de l'original vaut mieux qu'un fichier que vous ne pouvez pas lire.
Ce que la conversion CSV vers JSON vous coûte
Rien, et il vaut mieux le dire franchement que d'inventer une réserve. Un CSV porte des lignes de valeurs et un JSON porte tout cela et davantage. Ce qui change, c'est ce que vous pouvez en faire.
Une réserve qui n'est pas une perte mais qui surprend : tout arrive en chaîne de caractères. Un CSV ne dit rien de ce que ses valeurs signifient, si bien que 49 devient « 49 » et non 49. Deviner serait pire : un code produit valant 007 perdrait ses zéros.
D'où viennent les fichiers CSV et JSON
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 JSON
La structure est ce qui subsiste du fichier CSV, et la structure est ce dont un modèle a besoin. CSV en entrée, JSON en sortie, avec l'arbre des titres intact plutôt qu'aplati en un seul long paragraphe.
CSV vers JSON, mesuré plutôt que promis
En passant CSV vers JSON sur le moteur réel avec un vrai fichier, Python a écrit 110 octets au format JSON en moins d'un dixième de seconde, machine par ailleurs au repos. C'est un fichier CSV un jour donné et non une moyenne, et c'est pourquoi le nombre est donné avec le fichier qui l'a produit.
Le verdict CSV vers JSON 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 JSON contient.
Le même fichier CSV, envoyé ailleurs
Les autres sorties que la sonde a mesurées à partir d'un fichier CSV, pour que le coût du choix du format JSON 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 CSV.
CSV vers PDF : 12 680 octets en 1,0 secondes, vérifié par une signature de format.
CSV vers MD : 114 octets en 0,1 secondes, vérifié par un aller-retour pandoc.
CSV vers DOCX : 9 945 octets en 0,1 secondes, vérifié par un aller-retour pandoc.
CSV vers EPUB : 4 913 octets en 0,1 secondes, vérifié par un aller-retour pandoc.
CSV vers TXT : 114 octets en moins d'un dixième de seconde, vérifié par la relecture du texte.
CSV vers HTML : 3 894 octets en 0,1 secondes, vérifié par un aller-retour pandoc.
Les autres routes vers JSON, et ce qu'elles ont mesuré
Parmi les routes publiées vers JSON, CSV est la septième plus grosse sortie des 8 mesurées. Les fichiers témoins diffèrent : ce classement porte sur la sonde et non sur votre document.
YAML vers JSON : 110 octets en moins d'un dixième de seconde.
DOCX vers JSON : 1 722 octets en 0,1 secondes.
HTML vers JSON : 2 058 octets en moins d'un dixième de seconde.
MD vers JSON : 1 726 octets en moins d'un dixième de seconde.
ODT vers JSON : 1 761 octets en 0,1 secondes.
Ce que nous ne prétendrons pas sur CSV vers JSON
Un fichier CSV 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 CSV vers JSON 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 CSV dont la forme ne convient pas au JSON 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.
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 CSV à la fois, choisi dans le navigateur. Il n'y a rien d'autre à régler et rien d'autre à proposer.
CSV vers JSON : les questions que l'on pose
Qu'est-ce qui convertit vraiment mon fichier CSV en JSON ?
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 CSV est envoyé une fois, Python s'exécute une fois, le JSON revient, et aucun des deux fichiers n'est conservé ensuite.
Combien de temps prend une conversion CSV vers JSON ?
Sur le fichier utilisé par la sonde, Python a mis moins d'un dixième de seconde et écrit 110 octets de JSON. C'est une mesure réelle sur un fichier CSV réel, pas une moyenne et pas une promesse sur le vôtre : un CSV 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 CSV au JSON ?
Celle qu'il faut connaître en premier : rien, et il vaut mieux le dire franchement que d'inventer une réserve. Un CSV porte des lignes de valeurs et un JSON porte tout cela et davantage. Ce qui change, c'est ce que vous pouvez en faire.
Pourquoi 49 est-il entre guillemets, « 49 », dans le JSON ?
Parce qu'un CSV ne dit rien de ce que ses valeurs signifient : tout arrive donc en texte. Deviner serait pire : un code produit valant 007 perdrait ses zéros, et une date valant 03/04 deviendrait ambiguë. Convertir les colonnes que vous connaissez est une étape dont vous gardez la main.
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 CSV vers JSON est-elle gratuite ?
Il y a une franchise gratuite chaque mois, et une conversion CSV vers JSON 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 JSON moins bon.