Accueil
  • #développement
  • #CSV
  • #outils

Convertir un CSV en JSON : les pièges à éviter

Par · · 4 min de lecture

Convertir un CSV en JSON paraît trivial : on coupe chaque ligne aux virgules, on associe les valeurs aux titres de colonnes, et c’est fini. En pratique, un export Excel français casse souvent cette logique : colonnes décalées, accents illisibles, codes postaux qui perdent leur zéro.

Voici les pièges les plus fréquents de la conversion CSV vers JSON (et du retour), avec des exemples et la manière de les éviter.

Séparateur : point-virgule ou virgule ?#

Le « C » de CSV signifie comma, mais dans un Excel configuré en français, la virgule est le séparateur décimal (12,50). Les exports utilisent donc le point-virgule :

nom;ville;age;code_postal;prix
Léa;Lyon;31;69003;12,50
Marc;Paris;28;01000;8,00

Si un programme lit ce fichier en pensant que le séparateur est la virgule, la colonne prix se coupe en deux : 12 d’un côté, 50 dans une colonne fantôme, sans qu’aucune erreur ne soit levée. La tabulation est un troisième séparateur répandu, notamment pour les copier-coller depuis un tableur.

Le bon réflexe : vérifier le séparateur avant de convertir, ou laisser un outil le détecter en comparant plusieurs lignes.

Guillemets et retours à la ligne dans une cellule#

Une cellule peut contenir le séparateur, un guillemet ou même un retour à la ligne. Le format CSV (RFC 4180) prévoit alors d’entourer le champ de guillemets, et de doubler les guillemets internes :

nom,commentaire
"Dupont, Jean","Il a dit ""bonjour""
à tous"
Martin,ok

Ce fichier contient trois enregistrements (l’en-tête et deux lignes de données) répartis sur quatre lignes de texte. Un simple découpage sur les virgules et les sauts de ligne le détruit. Un guillemet ouvert jamais refermé est une vraie erreur de format : mieux vaut la voir signalée, avec la ligne où le champ a commencé, que d’obtenir un résultat faux.

Encodage UTF-8 et accents dans Excel#

Un CSV est du texte brut, et l’encodage fait la différence. Un fichier en UTF-8 sans marque d’ordre des octets (BOM) est parfois ouvert par Excel comme du Windows-1252 : « Léa » devient « Léa ». Cela dépend de la version d’Excel et de la manière d’ouvrir le fichier (double-clic ou import avec choix de l’encodage).

Pour produire un CSV qui s’ouvre correctement, on ajoute un BOM UTF-8 en tête de fichier. À la lecture, ce BOM doit au contraire être retiré, faute de quoi le premier titre de colonne garde un caractère invisible et ne correspond plus à la clé attendue.

Tout est du texte : le piège des types#

Un CSV ne connaît pas les types : 31, 01000 et vrai sont des chaînes. En JSON, la différence compte : "age": "31" et "age": 31 ne se comparent pas de la même façon.

Convertir automatiquement les nombres a un coût. Reprenons l’exemple ci-dessus avec la conversion de types :

{ "code_postal": 69003, "prix": 12.5 }
{ "code_postal": "01000", "prix": 8 }

69003 devient un nombre, mais 01000 reste un texte, car un zéro initial signale un code et non une quantité. Le même champ se retrouve alors avec deux types différents. Les codes postaux, numéros de téléphone, références et identifiants longs devraient rester du texte. Les dates, elles, ne sont jamais converties. Ne convertissez les types que si toutes les colonnes numériques s’y prêtent, et vérifiez le résultat.

Convertir avec l’outil#

Le convertisseur CSV ↔ JSON fonctionne dans le navigateur, sans envoi de fichier :

  1. Choisissez le Sens de la conversion (CSV → JSON ou JSON → CSV), puis collez le texte ou importez un fichier .csv, .json, .tsv ou .txt (5 Mo maximum).
  2. Laissez la Détection automatique du séparateur ou choisissez virgule, point-virgule ou tabulation. L’outil affiche celui qu’il a détecté.
  3. Gardez cochée « La première ligne contient les noms des colonnes » pour obtenir des objets, ou décochez-la pour obtenir des tableaux. Cochez « Convertir les types » seulement si nécessaire.
  4. Copiez le résultat ou téléchargez-le. Le CSV produit utilise le point-virgule par défaut et commence par un BOM UTF-8, pour qu’Excel lise bien les accents.

Les lignes dont le nombre de colonnes diffère de l’en-tête déclenchent un avertissement. Dans le sens inverse, les objets imbriqués sont aplatis sur un niveau, en colonnes comme adresse.ville. Pour relire le JSON obtenu, le formateur JSON en vérifie la syntaxe (voir aussi les erreurs JSON courantes).

Avant d’utiliser le résultat#

  • Le nombre de lignes et de colonnes affiché correspond-il à ce que vous attendez ?
  • Les accents sont-ils intacts, et le premier titre de colonne est-il propre ?
  • Les prix et décimales sont-ils lus correctement, malgré la virgule française ?
  • Les codes, téléphones et identifiants sont-ils restés du texte ?

Outils utilisés dans cet article

À lire aussi