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 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ère | CSV | JSON |
|---|---|---|
| Structure | Tabulaire (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 principal | Exports Excel, bases de données, ETL | APIs REST, configs, stockage NoSQL |
| Taille fichier | ✅ Compact | Verbeux (clés répétées) |
| Support tableur | ✅ Excel, Sheets, LibreOffice | ❌ Pas natif |
| Standard RFC | RFC 4180 | RFC 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éparateur | Usage typique | Extension |
|---|---|---|
, (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 |
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`);
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.