CSV, JSON et YAML
Trois formats portent l'essentiel des données structurées du monde. Passer de l'un à l'autre est facile ; le faire sans corrompre discrètement quelque chose demande un peu de soin.
Publié le
À quoi sert chacun
CSV est un tableau : des lignes et des colonnes, rien d'autre. Il est lisible partout, très léger, et ne peut rien exprimer d'imbriqué. JSON est un arbre — des objets dans des tableaux dans des objets — et c'est ce que parlent presque toutes les API web. YAML exprime les mêmes structures que JSON mais avec l'indentation au lieu des accolades, ce qui le rend bien plus agréable à lire et à modifier pour des humains, et explique pourquoi les fichiers de configuration s'y sont tournés.
Le piège du changement de type
C'est celui qui coûte réellement de l'argent. Un CSV ne contient que du texte — il n'existe aucun moyen de marquer une valeur comme un nombre, une date ou une chaîne. Les convertisseurs devinent donc, et leurs suppositions sont souvent fausses :
- Un code postal comme
01234devient le nombre1234, et perd son zéro initial. - Un code produit comme
1-2devient une date. - Un long numéro de compte devient un nombre à virgule flottante et perd ses derniers chiffres.
NA, qui signifie Amérique du Nord, devient « non disponible ».
Chacune de ces erreurs est silencieuse. C'est pourquoi une conversion CSV en JSON soignée doit laisser chaque valeur sous forme de chaîne et vous laisser décider — ce que fait délibérément le convertisseur de ce site, même si cela paraît pointilleux au début.
Ce qui ne survit pas au passage en CSV
L'imbrication. Un tableau JSON d'objets plats devient un tableau propre. Dès qu'une valeur est elle-même un objet ou un tableau, il n'y a plus de colonne où la mettre. Les options sont d'aplatir avec des clés composées, de resérialiser la partie imbriquée en texte dans sa cellule, ou de l'abandonner — et l'abandonner en silence est le pire des trois. La réécrire sous forme de texte JSON dans la cellule permet au moins de retrouver les données.
Les pièges de YAML
YAML est agréable à lire et exceptionnellement facile à mal écrire.
- L'indentation, c'est la structure, et les tabulations ne sont pas autorisées. Une espace mal placée change le sens au lieu de provoquer une erreur.
- Certains mots nus sont des booléens. Dans les anciennes versions de YAML,
y,n,on,off,yesetnosont tous lus comme vrai ou faux — une colonne de pays contenantNOpour la Norvège devient doncfalse. Mettez-les entre guillemets. - Les commentaires disparaissent à la conversion en JSON, car JSON n'a aucun moyen de les représenter.
L'aller-retour n'est pas garanti
Convertir du JSON en YAML puis revenir redonne généralement ce que vous aviez au départ. Convertir du CSV en JSON puis revenir ne le fait généralement pas : le style des guillemets, l'ordre des colonnes pour des enregistrements de formes différentes et la représentation des valeurs vides sont autant de choix, et les outils ne choisissent pas tous pareil. Si un aller-retour doit être exact, vérifiez-le au lieu de le supposer.
Pour passer de l'un à l'autre : convertir CSV en JSON, convertir JSON en CSV, ou convertir JSON en YAML — et vérifiez le résultat, car l'aller-retour n'est pas toujours exact.