Aller au contenu principal
PulsarKit

CSV, Excel ou JSON : mesurés sur un même tableau de 10 000 lignes

Nous avons fait passer un même tableau de 10 000 lignes par le CSV, Excel et le JSON avec six convertisseurs. Voici les tailles de fichier, les tailles en ZIP, les temps et toutes les cellules qui ont changé au retour.

Par PulsarKit ·

La réponse courte

Pour un tableau plat, le CSV a donné le fichier texte le plus petit : 1,2 Mo pour nos 10 000 lignes. Les mêmes lignes ont pesé 2,7 Mo en JSON indenté et 2 Mo en NDJSON. Compressés en ZIP, le CSV et le JSON se sont retrouvés proches : 357 Ko contre 398 à 424 Ko.

Les plus grandes différences sont apparues au retour. Un aller-retour par Excel ou par JSON, avec les réglages par défaut, a modifié 10 960 cellules sur 100 000, et pas les mêmes. Un seul réglage a rendu l’aller-retour par Excel exact. Seul le JSON a conservé les champs imbriqués : une fois passés par un CSV ou une feuille de calcul, ils ne sont jamais revenus. Choisissez donc le format selon ce qui lira le fichier ensuite.

Comment nous avons mesuré

Le 21 octobre 2026, nous avons construit un tableau de test avec un script : 10 000 lignes et 10 colonnes de données inventées. Il contient des identifiants avec des zéros en tête comme 000001, des codes-barres à 13 chiffres et des numéros de compte à 19 chiffres. Il contient aussi des dates ISO et des montants à deux décimales, dont environ la moitié sont négatifs. Les noms mêlent lettres latines, accentuées et cyrilliques, avec un emoji toutes les cent lignes. Une note sur cent contient une virgule, des guillemets et un saut de ligne. La colonne des coupons est vide sur 3 096 lignes, et chaque numéro de téléphone commence par un signe plus.

Nous l’avons fait passer par six convertisseurs sur pulsarkit.com : CSV en Excel, Excel en CSV, CSV en JSON, JSON en CSV, Excel en JSON et JSON en Excel. Nous avons utilisé Chrome 155 sur un MacBook de 2023. Les six fonctionnent dans l’onglet du navigateur, et les réglages sont restés par défaut sauf mention contraire. Le chronomètre tournait de l’appui sur le bouton jusqu’à l’apparition du bouton « Télécharger ». Notre propre script a ensuite comparé chaque cellule revenue avec l’original, et nous avons lu les types de cellules dans chaque classeur. Les tailles en ZIP viennent d’un ZIP standard, en Deflate de niveau 6.

Taille, taille en ZIP et vitesse

Le CSV écrit les noms de colonnes une seule fois, en haut. Le JSON les répète dans chaque enregistrement. Avec son indentation par défaut de deux espaces, CSV en JSON a transformé le tableau en 2,7 Mo, soit 2,3 fois le CSV. Le NDJSON, un enregistrement compact par ligne, a pesé 2 Mo. Le Formateur JSON réglé sur « Minifier » a ramené le fichier indenté aux mêmes 2 Mo, soit 23,6 % de moins.

Un ZIP efface l’essentiel de cet écart, car des clés répétées sont exactement ce que la compression traite le mieux. En ZIP, le CSV a pesé 357 Ko, le NDJSON 398 Ko et le JSON indenté 424 Ko.

Un fichier XLSX est déjà un ZIP : son poids dépend donc du logiciel qui l’écrit. La feuille produite par CSV en Excel, réenregistrée par LibreOffice Calc, occupait 753 Ko. Quand seule la taille compte, envoyez le CSV compressé en ZIP.

La vitesse n’a pas départagé les formats. Nous avons chronométré 60 conversions, et la conversion médiane des 10 000 lignes a pris environ un tiers de seconde. Parmi elles, 49 ont duré moins d’une demi-seconde. La plus lente, le premier Excel en CSV de notre session, a pris 2 secondes.

Ce qu’un aller-retour a changé

Par Excel : CSV en Excel, puis Excel en CSV. Les zéros en tête, les comptes à 19 chiffres, les codes-barres, les sauts de ligne dans les notes, les emoji et les cellules vides sont tous revenus tels quels. Deux colonnes ont changé. Chaque true et false est revenu en TRUE et FALSE, car le classeur les stocke comme valeurs logiques. Et 960 montants ont perdu un zéro final : 612.40 est devenu 612.4, car le classeur garde le nombre, pas la façon dont il était écrit.

Par JSON : CSV en JSON, puis JSON en CSV. Les mêmes 960 montants ont perdu leur zéro final, pour la même raison. Chaque numéro de téléphone est revenu précédé d’une apostrophe, sous la forme '+1 202 555 0117. JSON en CSV en ajoute une devant toute valeur qui commence par +, =, - ou @ et qui n’est pas un simple nombre : ainsi, une feuille de calcul ne peut pas l’exécuter comme une formule. Les cellules vides sont devenues des chaînes vides dans le JSON, alors que Excel en JSON a écrit null pour les mêmes 3 096 cellules. Le JSON obtenu dépend donc du chemin, sauf si vous réglez « Les cellules vides deviennent » sur « null » dans CSV en JSON.

Dans un navigateur réglé sur UTC ou UTC+4, chaque date a traversé CSV en Excel sans changement. CSV en Excel écrit chaque date à minuit UTC, donc un navigateur réglé sur l’heure de New York ne la décale pas non plus.

Un seul réglage a supprimé toutes les modifications sur le chemin d’Excel : « Types de cellules » réglé sur « Tout en texte », dans CSV en Excel. À l’heure de New York comme en UTC+4, l’aller-retour a alors rendu les 100 000 cellules exactement telles qu’elles étaient écrites. Le prix à payer est une feuille de cellules texte, montants compris. Le texte convient aussi aux codes-barres. Avec les réglages par défaut, nos codes à 13 chiffres sont devenus des nombres au format Standard. La documentation de Microsoft indique que le format Standard affiche en notation scientifique les nombres de 12 chiffres ou plus.

Les données imbriquées ne reviennent pas

Un vrai JSON est rarement plat : nous avons donc donné à chaque enregistrement un objet address et une liste de tags, soit 3,8 Mo en JSON indenté. JSON en CSV a réparti l’adresse dans des colonnes nommées address.city et address.zip, et réuni les tags dans une seule cellule, comme new, wholesale. JSON en Excel a fait de même.

Reconvertis en JSON, aucun des deux fichiers n’a retrouvé sa forme d’origine. Tous deux ont donné des clés plates comme address.city, et le champ tags est devenu une chaîne au lieu de rester une liste. Le chemin par CSV a aussi changé des types : 6 017 des 10 000 codes postaux, ceux sans zéro en tête comme 78701, sont revenus sous forme de nombres, tandis que 02134 est resté du texte. Sur ce chemin, les coupons vides, null dans notre fichier, sont revenus en chaînes vides. Le chemin par Excel a gardé chaque code postal en texte et chaque null en null.

Quel format choisir

Si une personne va trier, filtrer et additionner les données, prenez le XLSX. Il garde les montants en nombres, les dates en dates et true ou false en valeurs logiques. Si c’est un programme qui lit le fichier, prenez le JSON. Il garde les nombres, true, false et null, et c’est le seul des trois qui conserve les champs imbriqués. Le NDJSON a la même taille que le JSON minifié et met un enregistrement par ligne.

Si le fichier ne fait que passer d’un système à l’autre, un CSV compressé en ZIP est le plus petit des trois. Les séparateurs, les encodages et l’indicateur d’ordre d’octets peuvent encore faire trébucher un CSV sur son chemin vers Excel. Notre guide Aller de CSV à Excel et retour sans abîmer vos données les passe en revue.

Outils utilisés dans cet article

À lire ensuite