Le JSON est un arbre et le CSV est une grille, donc toute conversion entre les deux est une décision sur la façon d'aplatir l'arbre. Presque toutes les surprises viennent de là plutôt que d'un outil particulier, et savoir quelle décision a été prise est ce qui permet de faire confiance au résultat.
Le cas propre est un tableau d'objets plats : chaque objet devient une ligne, chaque clé devient une colonne, et rien n'est perdu. Les ennuis commencent quand une valeur est elle-même un objet, quand des enregistrements portent des clés différentes, ou quand un tableau apparaît dans un enregistrement. Les objets imbriqués sont aplatis en noms de colonnes pointés, si bien qu'un objet adresse contenant une ville devient une colonne adresse.ville. Les enregistrements aux clés différentes produisent l'union de toutes les colonnes, avec des cellules vides là où un enregistrement n'avait rien. C'est en général ce qu'attend un tableur, et cela mérite d'être confirmé plutôt que supposé.
Les types ne survivent pas à la traversée. Le CSV n'a aucune notion de nombre, de booléen ou de null ; chaque cellule est du texte, et ce qui ouvrira le fichier ensuite appliquera ses propres suppositions. C'est là que des identifiants à zéro initial sont silencieusement transformés en entiers, qu'un long identifiant numérique devient une notation scientifique, et qu'une date dans un format arrive comme une autre date dans une autre locale. Si les données partent vers un tableur, les réglages d'import de ce tableur comptent autant que la conversion.
Les tableaux à l'intérieur des enregistrements sont le cas sans bonne réponse. Une grille ne peut pas représenter une liste dans une cellule sans choisir une convention, et chaque convention perd quelque chose : joindre avec un séparateur casse dès qu'une valeur contient ce séparateur, développer en colonnes numérotées fait varier la forme avec l'enregistrement le plus long. C'est le cas à inspecter à la main plutôt qu'à croire.
La vérification pratique prend quinze secondes et attrape tout ce qui précède : ouvrez le résultat et trouvez une ligne dont vous connaissez déjà les bonnes valeurs. Si l'identifiant a encore son zéro initial et si la date est celle que vous attendiez, la conversion a fait ce que vous vouliez. Sinon, vous l'apprenez maintenant plutôt qu'après l'avoir transmis.
La conversion s'exécute dans votre navigateur. Cela compte parce que le JSON converti en CSV est presque toujours un export destiné à un tableur, c'est-à-dire d'ordinaire une liste d'enregistrements réels concernant des personnes réelles, et ce sont exactement les fichiers qu'il ne faut pas envoyer à un service pour les remettre en forme.