Service en ligne 100% Gratuit Utilitaires Web AngularForAll

- Convertisseur CSV ⇔ JSON en ligne

Convertisseur Csv Json En Ligne Csv To Json Javascript Json To Csv Navigateur Convertir Csv Json Gratuit Parser Csv Javascript Export Json Csv Développeur Csv Json Typescript Transformer Csv En Json Outil Conversion Données Web Csv Json Sans Installation

Convertissez instantanément CSV en JSON et JSON en CSV dans votre navigateur. Détection automatique des en-têtes, choix du séparateur, typage automatique et téléchargement. 100% local, aucune donnée envoyée.

🔄

Convertisseur CSV ↔ JSON

CSV → JSON

CSV vs JSON : comprendre les deux formats

CSV (Comma-Separated Values) et JSON (JavaScript Object Notation) sont les deux formats d'échange de données les plus répandus dans l'écosystème web et data. Ils répondent à des besoins différents et se complètent naturellement.

CritèreCSVJSON
StructureTabulaire (lignes/colonnes)Arborescente (objets imbriqués)
Lisibilité humaine✅ Excellente pour données plates✅ Bonne pour structures complexes
Types de données❌ Tout en chaîne✅ Natif (string, number, bool, null)
Imbrication❌ Non✅ Illimitée
Usage principalExports Excel, bases de données, ETLAPIs REST, configs, stockage NoSQL
Taille fichier✅ CompactVerbeux (clés répétées)
Support tableur✅ Excel, Sheets, LibreOffice❌ Pas natif
Standard RFCRFC 4180RFC 8259 / ECMA-404

La règle d'or : utilisez CSV pour des données tabulaires et homogènes (exports, rapports, migrations) et JSON pour des structures complexes ou imbriquées (APIs, configurations, documents).

Syntaxe CSV : règles et variantes

Le format CSV semble simple mais recèle de nombreuses subtilités définies par le RFC 4180 et les implémentations réelles (Excel, Python, PostgreSQL…).

Structure de base

# CSV standard (séparateur virgule, RFC 4180)
name,age,city,active
Alice,30,Paris,true
Bob,25,Lyon,false
Charlotte,35,"Bordeaux, Gironde",true

Règles d'échappement

Les guillemets doubles permettent d'inclure des virgules, sauts de ligne et guillemets dans une valeur :

# Valeur contenant une virgule → entourer de guillemets
"Bordeaux, Gironde"

# Valeur contenant des guillemets → doubler les guillemets
"Il a dit ""bonjour"" à Alice"

# Valeur multiligne (RFC 4180 l'autorise)
"Première ligne
Deuxième ligne"

Variantes de séparateurs

SéparateurUsage typiqueExtension
, (virgule)Standard international, APIs.csv
; (point-virgule)Excel France (virgule = décimale).csv
\t (tabulation)Exports SQL, Linux tools.tsv
| (pipe)Logs, systèmes legacy.psv
Astuce : si vous ouvrez un CSV dans Excel et voyez tout sur une seule colonne, c'est souvent un problème de séparateur. Essayez le point-virgule ou importez via Données → À partir du texte/CSV.

CSV avec en-têtes vs sans en-têtes

# Avec en-têtes (recommandé) — ligne 1 = noms des colonnes
id,name,email
1,Alice,alice@example.com
2,Bob,bob@example.com

# Sans en-têtes — conversion en tableau de tableaux
1,Alice,alice@example.com
2,Bob,bob@example.com

Conversion CSV ↔ JSON : les cas pratiques

CSV → JSON avec en-têtes (tableau d'objets)

C'est le cas le plus courant : chaque ligne CSV devient un objet JSON dont les clés sont les en-têtes.

/* CSV d'entrée */
name,age,city,active
Alice,30,Paris,true
Bob,25,Lyon,false

/* JSON généré — tableau d'objets */
[
  { "name": "Alice", "age": 30, "city": "Paris", "active": true },
  { "name": "Bob",   "age": 25, "city": "Lyon",  "active": false }
]

Notez le typage automatique : 30 est un nombre, true un booléen — pas des chaînes.

CSV → JSON sans en-têtes (tableau de tableaux)

/* CSV sans en-têtes */
Alice,30,Paris
Bob,25,Lyon

/* JSON généré */
[
  ["Alice", 30, "Paris"],
  ["Bob",   25, "Lyon"]
]

JSON → CSV (aplatissement)

La conversion JSON → CSV fonctionne bien pour les tableaux d'objets plats. Les structures imbriquées sont aplaties en chaîne ([object Object]) — prévoyez une normalisation préalable si nécessaire.

/* JSON d'entrée */
[
  { "id": 1, "product": "Laptop", "price": 999.99, "stock": true },
  { "id": 2, "product": "Mouse",  "price": 29.90,  "stock": false }
]

/* CSV généré */
id,product,price,stock
1,Laptop,999.99,true
2,Mouse,29.9,false

Implémentation JavaScript : l'algorithme clé

// CSV → JSON : parsing ligne par ligne avec gestion des guillemets
function csvToJson(csv, delimiter = ',', hasHeader = true) {
  const rows = parseCSVRows(csv, delimiter);
  if (!rows.length) return [];

  if (hasHeader) {
    const [headers, ...data] = rows;
    return data.map(row =>
      Object.fromEntries(headers.map((h, i) => [h, coerce(row[i] ?? '')]))
    );
  }
  return rows.map(row => row.map(coerce));
}

// Coercion de types : "30" → 30, "true" → true, "null" → null
function coerce(v) {
  if (v === '')      return '';
  if (v === 'true')  return true;
  if (v === 'false') return false;
  if (v === 'null')  return null;
  const n = Number(v);
  return isNaN(n) ? v : n;
}

Cas d'usage développeurs

1. Import/export base de données

# PostgreSQL → CSV → JSON pour une API REST
\copy (SELECT id, name, email FROM users) TO '/tmp/users.csv' CSV HEADER;

# Puis conversion CSV → JSON pour l'API
const users = csvToJson(fs.readFileSync('/tmp/users.csv', 'utf8'));

2. Données de test (fixtures)

# Créer des fixtures depuis Excel
# 1. Exporter l'onglet Excel en CSV (Fichier → Enregistrer sous → CSV UTF-8)
# 2. Convertir en JSON avec cet outil
# 3. Utiliser dans vos tests Jest/Cypress

// cypress/fixtures/products.json  (généré depuis products.csv)
[
  { "id": 1, "name": "Laptop Pro", "price": 1299, "category": "electronics" },
  { "id": 2, "name": "Wireless Mouse", "price": 49, "category": "accessories" }
]

3. Migration de données

# ETL simple : CSV legacy → JSON moderne
# Fichier CSV d'une ancienne app (séparateur ;)
id;prenom;nom;email;date_naissance
1;Alice;Martin;alice@ex.com;1990-05-15
2;Bob;Dupont;bob@ex.com;1985-11-22

# JSON pour la nouvelle API (avec typage)
[
  { "id": 1, "firstName": "Alice", "lastName": "Martin", "email": "alice@ex.com", "birthDate": "1990-05-15" },
  { "id": 2, "firstName": "Bob",   "lastName": "Dupont", "email": "bob@ex.com",   "birthDate": "1985-11-22" }
]

4. Rapport → spreadsheet

// JSON API → CSV pour rapport Excel
const apiData = await fetch('/api/orders').then(r => r.json());
const csv = jsonToCsv(apiData, ',', true);

// Téléchargement navigateur
const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' });
const url  = URL.createObjectURL(blob);
const a    = document.createElement('a');
a.href = url; a.download = 'orders.csv'; a.click();

5. Pipeline Node.js

// pipeline-csv-to-json.js — traitement batch
const fs = require('fs');
const { parse } = require('csv-parse/sync');

const csvData  = fs.readFileSync('input.csv', 'utf8');
const records  = parse(csvData, { columns: true, cast: true });
const filtered = records.filter(r => r.active === true);

fs.writeFileSync('output.json', JSON.stringify(filtered, null, 2));
console.log(`✅ ${filtered.length} enregistrements exportés`);
Bibliothèques recommandées : Pour des traitements en production, préférez csv-parse (Node.js), Papa Parse (browser), pandas (Python) ou encoding/csv (Go) qui gèrent tous les cas limites (BOM UTF-8, retours chariot Windows, guillemets imbriqués…).

Pièges et bonnes pratiques

Encodage : toujours UTF-8

# Problème : Excel exporte parfois en ISO-8859-1 (latin1)
# Les accents apparaissent comme "é" au lieu de "é"

# Solution Node.js : spécifier l'encodage
const csv = fs.readFileSync('data.csv', 'latin1');
// ou convertir avec iconv-lite
const iconv = require('iconv-lite');
const csv = iconv.decode(fs.readFileSync('data.csv'), 'win1252');

BOM UTF-8 (Byte Order Mark)

# Excel ajoute parfois un BOM () en début de fichier UTF-8
# Cela crée une première colonne nommée "id" au lieu de "id"

# Solution : supprimer le BOM
const csv = rawCsv.replace(/^/, '');

Valeurs numériques avec séparateur décimal

# Piège courant avec Excel français : virgule = décimale
# "1.234,56" (format français) vs "1,234.56" (format international)
# Dans un CSV français séparé par ; :
montant;taux
1.234,56;2,5%   ← la virgule ne délimite pas ici !

# Solution : normaliser AVANT la conversion
const normalized = csv.replace(/(\d),(\d)/g, '$1.$2');

Colonnes vides et valeurs manquantes

# CSV avec colonnes vides
name,age,email,,phone
Alice,30,,extra,+33612345678

# JSON résultant — clé "" pour la colonne vide
{ "name": "Alice", "age": 30, "email": "", "": "extra", "phone": "+33612345678" }

# Bonne pratique : nettoyer après conversion
const clean = data.map(row => Object.fromEntries(
  Object.entries(row).filter(([k, v]) => k !== '' && v !== '')
));

Objets imbriqués JSON → CSV

// Problème : JSON avec objets imbriqués
{ "user": { "name": "Alice", "city": "Paris" }, "score": 95 }

// CSV résultant (aplatissement naïf)
user,score
[object Object],95  ← ❌ données perdues !

// Solution : aplatir d'abord
function flatten(obj, prefix = '') {
  return Object.entries(obj).reduce((acc, [k, v]) => {
    const key = prefix ? prefix + '.' + k : k;
    if (v && typeof v === 'object' && !Array.isArray(v))
      Object.assign(acc, flatten(v, key));
    else
      acc[key] = v;
    return acc;
  }, {});
}
// { "user.name": "Alice", "user.city": "Paris", "score": 95 }
// → CSV : user.name,user.city,score
//         Alice,Paris,95
  • Toujours valider l'encodage UTF-8 avant de traiter un CSV
  • Vérifier le séparateur utilisé (virgule vs point-virgule selon la locale)
  • Tester avec des valeurs contenant des guillemets et des virgules
  • Aplatir les objets imbriqués avant une conversion JSON → CSV
  • Normaliser les types numériques après CSV → JSON (coercion)
  • Supprimer le BOM UTF-8 si le CSV vient d'Excel

FAQ

Mes données restent-elles confidentielles ?

Oui, à 100%. La conversion s'effectue entièrement dans votre navigateur (JavaScript côté client). Aucune donnée n'est envoyée à un serveur.

Quelle taille de fichier puis-je traiter ?

L'outil gère confortablement des fichiers jusqu'à 5-10 Mo dans le navigateur. Au-delà, privilégiez un traitement serveur avec csv-parse (Node.js) ou pandas (Python) pour éviter de bloquer l'interface.

Le JSON généré garde-t-il les types numériques ?

Oui. L'outil applique une coercion automatique : "30"30, "true"true, "null"null. Les chaînes alphanumériques restent des chaînes.

Comment convertir un CSV Excel avec point-virgule ?

Sélectionnez Point-virgule ; dans le menu déroulant "Séparateur CSV" avant de coller votre données. La conversion s'adapte automatiquement.

Puis-je convertir un JSON imbriqué en CSV ?

L'outil gère les tableaux d'objets plats. Pour des structures imbriquées, aplatissez d'abord votre JSON (voir la section "Pièges") ou utilisez la bibliothèque flat (npm) : npm install flat.

Le TSV (tabulation) est-il supporté ?

Oui, sélectionnez Tabulation ⇥ dans le sélecteur de séparateur. Le TSV est courant pour les exports PostgreSQL (COPY TO) et les outils bioinformatiques.

Comment utiliser cet outil en ligne de commande ?

# Python — une ligne
python3 -c "import csv,json,sys; r=list(csv.DictReader(sys.stdin)); print(json.dumps(r,indent=2))" < data.csv

# Node.js avec csv-parse
npx csv2json data.csv > data.json

# jq + miller
mlr --csv --ojson cat data.csv

Conclusion

CSV et JSON sont complémentaires : CSV excelle pour les données tabulaires et les échanges avec les tableurs, JSON pour les structures complexes et les APIs modernes. Notre convertisseur vous permet de passer de l'un à l'autre instantanément, directement dans le navigateur, avec typage automatique et support des séparateurs courants.

Pour des pipelines de données en production, combinez cet outil de prototypage rapide avec des bibliothèques spécialisées (Papa Parse, csv-parse, pandas) qui gèrent tous les cas limites : encodage, BOM, guillemets imbriqués, fichiers multi-gigaoctets et streaming.

Partager