CSV et XML sont partout —— exports de tableurs, APIs héritées, feeds d’entreprise —— mais la plupart du code moderne veut du JSON. Convertir entre eux est simple une fois que vous comprenez les règles de mapping et les pièges (tout est string en CSV ; les attributs XML et les éléments répétés demandent un traitement particulier). Ce guide couvre les deux conversions en JavaScript, en Python et dans le navigateur.
Périmètre : cet article est le how-to large qui couvre CSV → JSON et XML → JSON au même endroit. Si vous avez besoin de XML spécifiquement —— attributs, nœuds de texte, éléments répétés et namespaces en profondeur —— lisez Conversion XML vers JSON : attributs, nœuds de texte, tableaux et namespaces. Pour le sens inverse, voir JSON vers XML.
Convertir CSV en JSON
Un fichier CSV est constitué de lignes de valeurs séparées par des virgules, généralement avec une ligne d’en-tête. La représentation JSON naturelle est un tableau d’objets, un par ligne, indexés par l’en-tête :
# CSV
id,name,active
1,Ada,true
2,Bob,false// JSON
[
{ "id": "1", "name": "Ada", "active": "true" },
{ "id": "2", "name": "Bob", "active": "false" }
] Remarquez que chaque valeur est une chaîne —— CSV n’a pas de types. Convertir "1" en nombre ou "true" en booléen est une étape de coercition séparée que vous devez faire délibérément.
CSV vers JSON en JavaScript
Pour du CSV simple et fiable vous pouvez splitter à la main —— mais le vrai CSV a des champs entre guillemets contenant des virgules et des sauts de ligne, alors en production utilisez un vrai parser comme papaparse :
// Parser minimal —— sûr seulement pour du CSV simple sans guillemets
function csvToJson(csv) {
const [header, ...rows] = csv.trim().split('\n');
const keys = header.split(',');
return rows.map((row) => {
const values = row.split(',');
return Object.fromEntries(keys.map((k, i) => [k, values[i]]));
});
}
// Production —— gère guillemets, virgules internes, sauts de ligne
import Papa from 'papaparse';
const result = Papa.parse(csvText, { header: true, dynamicTyping: true });
// dynamicTyping convertit "1" → 1 et "true" → true automatiquementCSV vers JSON en Python
import csv, json
with open('data.csv', newline='') as f:
rows = list(csv.DictReader(f)) # liste de dicts indexés par l’en-tête
print(json.dumps(rows, indent=2))Convertir XML en JSON
XML est plus délicat parce qu’il a des concepts que JSON n’a pas : attributs, nœuds de texte, et éléments uniques-vs-répétés. Il n’y a pas de mapping « correct » unique, alors choisissez une convention et appliquez-la de manière cohérente.
<!-- XML -->
<user id="1">
<name>Ada</name>
<role>admin</role>
<role>editor</role>
</user>// Un mapping JSON courant
{
"user": {
"@id": "1", // attribut, préfixé par @
"name": "Ada", // enfant unique → valeur
"role": ["admin", "editor"] // enfant répété → tableau
}
}XML vers JSON en JavaScript
import { XMLParser } from 'fast-xml-parser';
const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: '@' });
const obj = parser.parse(xmlString);
// Dans le navigateur, vous pouvez aussi utiliser DOMParser et parcourir l’arbre manuellement.XML vers JSON en Python
import xmltodict, json
doc = xmltodict.parse(xml_string) # les attributs deviennent des clés "@name"
print(json.dumps(doc, indent=2))Pièges de mapping à surveiller
- Les types sont perdus. Les valeurs CSV et XML arrivent en chaînes. Castez nombres et booléens explicitement —— ne supposez pas que le parser l’a fait.
- Unique vs répété. Un
<role>devient une valeur ; deux deviennent un tableau. Décidez si un champ doit toujours être un tableau pour éviter de surprendre les consommateurs. - Attributs vs éléments enfants.Choisissez une convention de préfixe (typiquement
@) et documentez-la. - Valeurs vides et espaces. Les éléments XML vides et les virgules CSV en fin de ligne peuvent produire
null,""ou des clés manquantes selon le parser.
BOM et bizarreries d’encodage
Les fichiers exportés depuis Excel et certains outils Windows commencent par un BOM UTF-8 (0xEF 0xBB 0xBF). Retirez-le avant le parsing, sinon votre premier en-tête / nom d’élément l’inclura silencieusement. RFC 8259 interdit un BOM au début du JSON, donc tout convertisseur que vous construisez devrait l’enlever de l’entrée plutôt que le recopier en sortie.
TSV vs CSV (et autres séparateurs)
« CSV » n’est pas toujours séparé par des virgules. Les valeurs séparées par tabulation (TSV) sont courantes dans les pipelines d’ingénierie parce que les tabulations n’apparaissent presque jamais dans les valeurs, ce qui dispense de toute mécanique de quoting. Les exports Excel européens utilisent souvent ;. Si votre sortie ressemble à une seule colonne bizarre, le fichier utilise un séparateur différent de celui qu’attend votre parser —— changez le séparateur ou utilisez une librairie qui le détecte.
Namespaces XML
Les éléments XML peuvent être qualifiés par un préfixe de namespace (par ex. <soap:Envelope>) lié par une déclaration xmlns. JSON n’a pas de notion de namespace, donc la plupart des convertisseurs prennent l’une des trois voies : garder le préfixe dans la clé ("soap:Envelope"), le retirer, ou stocker les déclarations xmlns en attributs @xmlns:*. Garder le préfixe est la seule option sans perte. Pour aller plus loin, voir Conversion XML vers JSON.
Validez et formatez le résultat
Après la conversion, vérifiez que la sortie est bien formée et lisible :
- Vérifiez qu’elle parse avec le validateur JSON —— voir Comment valider du JSON.
- Embellissez-la pour la relecture —— voir Comment formater du JSON.
- Si la conversion a produit du JSON pas tout à fait valide (guillemets simples, virgules finales), JSON Fix le répare instantanément.
Questions fréquentes
Comment convertir CSV en JSON ?
Parsez le CSV en lignes et mappez chacune sur un objet indexé par l’en-tête —— utilisez csv.DictReader en Python ou une librairie comme papaparse en JavaScript. Rappelez-vous que toutes les valeurs partent en chaînes ; castez les types vous-même.
Pourquoi toutes mes valeurs CSV-vers-JSON sont des chaînes ?
CSV n’est pas typé —— chaque champ est du texte. Activez la coercition de types (par ex. dynamicTyping de papaparse) ou convertissez explicitement nombres et booléens après le parsing.
Comment gérer les attributs XML en convertissant vers JSON ?
La plupart des convertisseurs mappent les attributs sur des clés avec un préfixe tel que @ (par ex. @id). Choisissez une convention et appliquez-la de manière cohérente pour que le code en aval sache où regarder.
Pourquoi ma sortie XML-vers-JSON donne parfois un objet et parfois un tableau ?
Un élément enfant unique mappe vers une valeur ; un élément répété mappe vers un tableau. Configurez votre parser pour traiter certains éléments toujours comme des tableaux si les consommateurs attendent une forme cohérente.
Convertissez, validez et formatez dans votre navigateur
- Comment convertir JSON en CSV (et l’inverse) —— le sens inverse, avec un convertisseur en un clic
- Convertisseur JSON ↔ CSV —— JSON ⇄ CSV dans votre navigateur
- Conversion XML vers JSON —— attributs, nœuds de texte, tableaux et namespaces en profondeur
- JSON vers XML —— le sens inverse, avec un convertisseur JSON ⇄ XML
- Validateur JSON —— confirmez que votre JSON converti est valide
- JSON Fix —— réparez une sortie de convertisseur pas tout à fait valide
- Comment formater du JSON —— embellir le résultat
- Qu’est-ce que JSON ? —— les types et règles du format cible