Convertir JSON en CSV
Convertissez un tableau JSON en CSV fiable sans écrire de script ni craindre que des enregistrements irréguliers décalent discrètement les colonnes.
Lancer gratuitement
Ce convertisseur strict reprend les clés du premier objet comme en-tête, vérifie que chaque objet possède exactement les mêmes clés, puis échappe les virgules, guillemets et sauts de ligne selon les règles CSV. Les tableaux vides, valeurs imbriquées, JSON invalide et enregistrements incompatibles produisent une erreur claire plutôt qu'une feuille ambiguë. La même conversion déterministe est accessible dans le navigateur et par API.
Préparez un tableau uniforme d'objets plats
Commencez par un JSON valide dont la valeur de premier niveau est un tableau. Chaque élément doit être un objet et chaque champ doit contenir une valeur JSON scalaire : chaîne, nombre, booléen ou null. Les objets et tableaux imbriqués sont volontairement refusés, car il n'existe pas une seule manière correcte de les placer dans une cellule CSV. Certains convertisseurs transforment les valeurs imbriquées en texte, tandis que d'autres aplatissent les chemins ou multiplient les lignes ; chaque choix modifie le sens des données. Cet outil reste prévisible en exigeant une forme tabulaire explicite avant la conversion. Le tableau doit contenir au moins un objet, et le premier objet doit posséder au moins une clé. L'ordre de ses clés devient celui des colonnes CSV : organisez donc ce premier enregistrement comme vous souhaitez voir apparaître la feuille. L'ordre des clés de l'objet JSON est conservé. Les valeurs peuvent contenir des virgules, guillemets, retours chariot ou sauts de ligne ; vous n'avez pas à les échapper vous-même pour le CSV, car le sérialiseur s'en charge après l'analyse du JSON.
Comprenez la validation stricte des en-têtes et lignes
La ligne d'en-tête provient uniquement des clés du premier objet. Chaque objet suivant est ensuite comparé à cet en-tête comme un ensemble complet de clés. Un enregistrement auquel il manque une clé échoue, tout comme un enregistrement avec une clé supplémentaire, même si sa valeur est vide ou null. L'ordre des clés dans les objets suivants n'a aucune importance : les valeurs sont toujours émises dans l'ordre des colonnes du premier objet. Ce contrôle strict évite une catégorie subtile d'erreurs d'exportation. Un convertisseur permissif peut créer une union croissante de colonnes, laisser des blancs inexpliqués ou décaler des données selon l'enregistrement qui introduit une propriété. Ici, une entrée irrégulière s'arrête avec une erreur qui désigne l'élément incompatible. null est accepté comme valeur plate intentionnelle et devient une cellule CSV vide. Une clé absente n'est pas assimilée à null, car l'absence et un null explicite peuvent représenter des états différents dans le système source. Validez ou normalisez les enregistrements irréguliers en amont.
Utilisez le CSV en toute sécurité dans vos processus
Après validation, chaque en-tête et chaque valeur sont sérialisés dans une cellule CSV. Les cellules contenant une virgule, un guillemet, un retour chariot ou un saut de ligne sont entourées de guillemets doubles, et les guillemets internes sont doublés. Les nombres et booléens conservent leur représentation textuelle JSON, tandis que null produit une cellule vide. Le résultat comprend une ligne d'en-tête suivie d'une ligne par objet, reliées par des caractères de saut de ligne. Comme l'algorithme est déterministe et n'utilise ni réseau, ni horloge, ni hasard, ni modèle, ni service externe, une entrée identique produit une sortie identique. Il convient ainsi aux tests, exportations planifiées, étapes de build et transferts de données reproductibles. Dans le navigateur, collez le JSON et copiez le CSV généré sans envoyer les données ailleurs. Pour automatiser, appelez l'API au tarif publié de $0.002 par requête. Enregistrez le texte retourné avec l'extension .csv, puis ouvrez-le ou importez-le en choisissant la virgule comme séparateur.
Cas d’usage
Exportez des données API vers une feuille
Transformez un tableau uniforme issu d'une API interne en colonnes que les équipes opérationnelles ou financières peuvent trier, filtrer et contrôler.
Créez des jeux de test déterministes
Produisez des fichiers CSV de test stables depuis des enregistrements JSON et échouez aussitôt qu'un champ est ajouté ou omis.
Validez un transfert de données tabulaires
Imposez un schéma commun à tous les enregistrements avant de remettre le CSV à un importateur, analyste, client ou processus de reporting.
Questions fréquentes
Comment l'en-tête CSV est-il choisi ?
Le convertisseur utilise les clés du premier objet dans leur ordre existant. Tous les objets suivants doivent avoir exactement le même ensemble de clés.
Que se passe-t-il si les objets ont des clés différentes ?
La conversion échoue avec une erreur d'entrée invalide qui désigne l'élément incompatible. Les clés absentes comme supplémentaires sont refusées.
Les objets ou tableaux imbriqués sont-ils acceptés ?
Non. Chaque valeur doit être une chaîne, un nombre, un booléen ou null. Normalisez ou aplatissez les données imbriquées avant la conversion.
Comment les virgules, guillemets et sauts de ligne sont-ils échappés ?
Toute cellule contenant un de ces caractères est entourée de guillemets doubles, et chaque guillemet interne est doublé.
Quel est le coût de la conversion par API ?
Chaque requête API réussie coûte $0.002. La version navigateur s'exécute gratuitement en local.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/web/json-to-csv \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"}'const res = await fetch("https://api.kit.forhosting.com/web/json-to-csv", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/json-to-csv",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/json-to-csv", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"[{\\"name\\":\\"Ada\\",\\"role\\":\\"Engineer\\",\\"active\\":true},{\\"name\\":\\"Grace\\",\\"role\\":\\"Admiral\\",\\"active\\":false}]"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/json-to-csv", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"text": "[{\"name\":\"Ada\",\"role\":\"Engineer\",\"active\":true},{\"name\":\"Grace\",\"role\":\"Admiral\",\"active\":false}]"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.json_to_csv",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |