Convertissez facilement vos données entre JSON et CSV. Outil bidirectionnel avec options avancées et prévisualisation en temps réel. Toutes les données restent sur votre appareil pour votre confidentialité.
components.privacyNotice.title components.privacyNotice.message
Convertissez facilement vos données entre les formats JSON et CSV. Cet outil gère les structures complexes, les tableaux imbriqués et offre des options de personnalisation pour s'adapter à tous vos besoins de traitement de données.
Transformez vos objets JSON complexes en fichiers CSV lisibles par Excel ou Google Sheets.
Convertissez vos tableurs en objets JSON structurés pour l'intégration API ou le traitement programmatique.
Personnalisez le délimiteur, l'encodage, la gestion des guillemets et bien d'autres paramètres.
Prévisualisez le résultat avant téléchargement avec coloration syntaxique et validation des données.
[
{
"user": {
"name": "Alice",
"age": 30
},
"orders": [1, 2, 3]
}
]user_name,user_age,orders Alice,30,"1,2,3"
name,age,city Alice,30,Paris Bob,25,Lyon
[
{"name":"Alice","age":30,"city":"Paris"},
{"name":"Bob","age":25,"city":"Lyon"}
]// JSON vers CSV
function jsonToCsv(jsonArray, options = {}) {
if (!Array.isArray(jsonArray) || jsonArray.length === 0) {
return '';
}
// Aplatir les objets imbriqués
const flattenObject = (obj, prefix = '') => {
const flattened = {};
for (const key in obj) {
const value = obj[key];
const newKey = prefix ? `${prefix}${options.separator || '_'}${key}` : key;
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
Object.assign(flattened, flattenObject(value, newKey));
} else if (Array.isArray(value)) {
flattened[newKey] = value.join(options.arrayJoin || ',');
} else {
flattened[newKey] = value;
}
}
return flattened;
};
// Aplatir tous les objets
const flattenedArray = jsonArray.map(item => flattenObject(item));
// Extraire toutes les clés
const allKeys = [...new Set(flattenedArray.flatMap(Object.keys))];
// Créer l'en-tête
const csvHeader = allKeys.join(',');
// Créer les lignes
const csvRows = flattenedArray.map(row =>
allKeys.map(key => {
const value = row[key] ?? '';
// Échapper les guillemets et encapsuler si nécessaire
return typeof value === 'string' && (value.includes(',') || value.includes('"'))
? `"${value.replace(/"/g, '""')}"`
: value;
}).join(',')
);
return [csvHeader, ...csvRows].join('\n');
}
// CSV vers JSON
function csvToJson(csvString, options = {}) {
const lines = csvString.trim().split('\n');
const delimiter = options.delimiter || ',';
// Extraire l'en-tête
const headers = lines[0].split(delimiter).map(h => h.trim());
// Traiter chaque ligne
return lines.slice(1).map(line => {
const values = line.split(delimiter);
const obj = {};
headers.forEach((header, index) => {
let value = values[index]?.trim() || '';
// Nettoyer les guillemets
if (value.startsWith('"') && value.endsWith('"')) {
value = value.slice(1, -1).replace(/""/g, '"');
}
// Auto-détection du type si activée
if (options.autoDetectTypes !== false) {
if (value === '') {
value = null;
} else if (!isNaN(value) && !isNaN(parseFloat(value))) {
value = parseFloat(value);
} else if (value.toLowerCase() === 'true') {
value = true;
} else if (value.toLowerCase() === 'false') {
value = false;
}
}
obj[header] = value;
});
return obj;
});
}
// Exemples d'utilisation
const jsonData = [
{ user: { name: "Alice", age: 30 }, tags: ["dev", "js"] },
{ user: { name: "Bob", age: 25 }, tags: ["design"] }
];
const csv = jsonToCsv(jsonData);
// user_name,user_age,tags
// Alice,30,"dev,js"
// Bob,25,design
const backToJson = csvToJson(csv);components.outilPage.suggestion.description