Pour convertir un JSON imbriqué en CSV, utilisez un convertisseur JSON vers CSV en ligne qui vous permet de choisir quel tableau JSON deviendra les lignes du CSV. Ce choix est bien plus important qu’il n’y paraît. Les exports JSON réels commencent souvent par des métadonnées, des informations de pagination ou des objets enveloppes, tandis que les enregistrements utiles se trouvent dans un chemin comme results, data.items ou payload.records.
En général, je ramène la conversion JSON vers CSV à trois décisions :
- Quel tableau doit devenir les lignes ?
- Quels champs d’objets imbriqués doivent devenir des colonnes ?
- Quels tableaux faut-il concaténer, conserver au format JSON ou développer sur plusieurs lignes ?
Une fois ces questions tranchées, la suite ressemble à un workflow CSV classique. Vous prévisualisez le résultat, vérifiez les colonnes, puis téléchargez un fichier CSV compatible avec un tableur, un CRM, un outil de BI ou un processus de nettoyage de données.
📌 En bref
Commencez par définir ce que doit représenter une ligne du CSV. Dans cet exemple, je veux une entreprise par ligne : le nœud de lignes sera donc
$.results. Je peux ensuite aplatir les métriques de l’entreprise et décider comment traiter des tableaux commecontactsettags.
Dans ce guide, j’utiliserai un export JSON imbriqué contenant 20 000 entreprises sous results. Le même workflow s’applique aux réponses d’API, aux résultats de scraping, aux logs de webhooks, aux exports CRM et aux données de marketplaces lorsque les enregistrements utiles ne se trouvent pas à la racine du JSON.
Accès rapide :
- Exemple de fichier JSON imbriqué
- Convertir un JSON imbriqué en CSV avec Datablist
- Choisir le bon nœud de lignes
- Aplatir les objets JSON imbriqués
- Gérer les tableaux dans les lignes JSON
- Vérifier et télécharger le CSV
Exemple de fichier JSON imbriqué
Pour cet exemple, imaginons un export JSON volumineux provenant d’une API ou d’un outil de scraping. Le fichier pèse environ 8,8 Mo et contient 20 000 enregistrements dans un tableau results situé au premier niveau.
L’objet racine se présente ainsi :
{
"meta": {
"generatedAt": "2026-07-04T10:00:00Z",
"source": "stress_test"
},
"results": [
{
"id": 0,
"name": "NbDXeG4Gyg",
"website": "https://example-0.com",
"contacts": [
{
"name": "Ava Martin",
"emails": ["ava@example-0.com"],
"phones": ["+1 555 0100"]
},
{
"name": "Noah Lee",
"emails": ["noah@example-0.com"],
"phones": []
}
],
"tags": "enterprise",
"metrics": {
"employees": 124,
"revenue": {
"amount": 476171,
"currency": "USD"
}
},
"createdAt": "2026-06-25T09:12:00Z"
},
{
"id": 1,
"name": "DwwGmkzmBi",
"website": "https://example-1.com",
"contacts": [
{
"name": "Mia Chen",
"emails": ["mia@example-1.com"],
"phones": ["+1 555 0101"]
}
],
"tags": ["saas", "mid-market"],
"metrics": {
"employees": 47,
"revenue": null
},
"createdAt": "2026-06-26T14:33:00Z"
}
]
}
C’est typiquement le genre de fichier qui met les convertisseurs basiques en difficulté. Les enregistrements ne constituent pas l’objet racine : ils se trouvent dans results. Ils contiennent également des objets et des tableaux imbriqués, des valeurs qui peuvent être tantôt des chaînes de caractères, tantôt des tableaux, ainsi que des valeurs nulles et des dates.
🔍 Pourquoi ce fichier constitue un bon test
Un tableau JSON plat ne teste que le cas le plus simple. Ce fichier couvre les choix qui comptent dans de vrais exports : métadonnées d’enveloppe, tableau d’enregistrements imbriqué, champs objets, champs tableaux, valeurs mixtes et valeurs nulles.
Voici la structure des premières lignes :
| Ligne | Format de Website | Nombre de contacts | Format de Tags | Chiffre d’affaires |
|---|---|---|---|---|
| 0 | Chaîne | 2 | Chaîne | Montant et devise |
| 1 | Chaîne | 2 | Tableau | Valeur nulle |
| 2 | Tableau | 1 | Tableau | Valeur nulle |
Le CSV cible doit comporter une ligne par entreprise. Je veux transformer en colonnes les champs utiles comme id, name, website, employees, amount, currency et createdAt. Pour des champs comme contacts et tags, je dois choisir le niveau de structure à conserver.
Convertir un JSON imbriqué en CSV avec Datablist
Ouvrez le convertisseur JSON de Datablist. Vous pouvez coller votre JSON dans l’éditeur ou importer un fichier .json.
Pour une petite réponse d’API, un simple copier-coller suffit. Pour un export plus volumineux, je préfère importer le fichier afin d’éviter qu’une partie des données soit accidentellement tronquée. Le contenu est lu dans le navigateur et la conversion s’effectue localement, sans envoi aux serveurs de Datablist.
Une fois le JSON chargé, Datablist analyse sa structure et recherche les tableaux d’objets. L’outil accepte comme racine JSON aussi bien les tableaux que les objets, puis examine des chemins imbriqués comme $.results, $.data.items ou des tableaux situés encore plus profondément.
Si la structure du fichier est difficile à comprendre, il m’arrive de commencer par ouvrir le JSON dans JSONCrack. Sa représentation sous forme d’arborescence permet de repérer le tableau qui doit devenir les lignes. Cette étape reste facultative, mais elle est pratique lorsque plusieurs tableaux pourraient convenir.
Dans cet exemple, le bon nœud de lignes est :
$.results
Je choisis $.results parce que je veux une entreprise par ligne. Chaque élément de ce tableau devient une ligne du CSV.
Datablist peut recommander un nœud de lignes, mais je le vérifie toujours manuellement. C’est à cette étape que surviennent la plupart des erreurs de conversion. Un fichier JSON peut contenir un tableau parent d’entreprises, un tableau enfant de contacts et un autre tableau enfant regroupant des tags ou des événements. Tous sont des tableaux, mais un seul correspond au CSV recherché.
⚠️ Changer de nœud de lignes change le jeu de données
$.resultset$.results[].contactssont deux nœuds valides, mais ils ne produisent pas le même CSV. Choisissez le tableau parent pour obtenir une ligne par compte. Choisissez le tableau enfant lorsque les éléments imbriqués constituent le jeu de données recherché.
Pour cet article, je conserve le nœud parent :
$.resultscorrespond à une entreprise ou un compte par ligne.$.results[].contactscorrespondrait à un contact par ligne.
Cette deuxième option peut être pertinente, mais elle modifie le résultat. Un CSV au niveau des contacts est utile pour créer une liste de personnes. Un CSV au niveau des entreprises convient mieux pour nettoyer des comptes, enrichir des entreprises, importer des enregistrements dans un CRM ou analyser des métriques.
Choisir le bon nœud de lignes
Un nœud de lignes est le tableau JSON dont les éléments deviendront les lignes du CSV.
Voici les cas les plus courants :
| Chemin JSON | Cas d’usage idéal |
|---|---|
$.results | Les enregistrements sont stockés sous une clé results |
$.data.items | Une API place les enregistrements dans un objet data |
$.payload.records | Un webhook ou un export interne place les enregistrements sous payload |
$.results[].contacts | Vous voulez un contact imbriqué par ligne |
Avant de choisir, je me pose généralement une seule question : que doit représenter une ligne ?
Si une ligne doit représenter une entreprise, un compte, une commande, un produit, une annonce ou un événement, choisissez le tableau parent. Si elle doit représenter un contact, un e-mail, une ligne de commande, un prix, un commentaire ou un événement enfant, choisissez le tableau enfant.
Cela paraît simple, mais ce choix transforme entièrement le CSV.
Avec $.results, le CSV conserve le contexte de l’entreprise. Le champ contacts reste une valeur imbriquée dans la ligne de l’entreprise, sauf si vous décidez de traiter les contacts séparément. Avec $.results[].contacts, le CSV devient une liste de contacts, mais les champs de l’entreprise parente ne sont pas ajoutés automatiquement, sauf si le convertisseur prend en charge cette fonction dans une prochaine version.
Par défaut, je commence par le tableau parent. Ce premier export est plus sûr, car je peux toujours examiner les tableaux imbriqués par la suite. Je ne passe à un tableau enfant que lorsque ses éléments constituent réellement le jeu de données recherché.
Aplatir les objets JSON imbriqués
C’est avec les objets imbriqués qu’un convertisseur CSV doit aller au-delà d’une simple transformation de fichier.
Dans notre exemple, metrics est un objet :
{
"metrics": {
"employees": 124,
"revenue": {
"amount": 476171,
"currency": "USD"
}
}
}
Dans un tableur, je ne veux pas d’une seule cellule metrics contenant un objet JSON. Je veux des colonnes que je puisse filtrer et trier :
employeesamountcurrency
Datablist détecte les chemins des objets imbriqués et vous permet de choisir ceux à aplatir. Je conserve les champs scalaires utiles sous forme de colonnes, car ils sont plus faciles à exploiter dans les outils CSV.
Dans cet exemple, j’aplatis :
metrics.employeesenemployeesmetrics.revenue.amountenamountmetrics.revenue.currencyencurrency
Le CSV attendu au niveau des entreprises ressemble à ceci :
| Colonne CSV | Valeur source |
|---|---|
id | Identifiant de la ligne |
name | Nom de l’entreprise ou du compte |
website | Site web, tableau concaténé ou chaîne JSON selon les paramètres |
contacts | Données de contacts imbriquées avec une entreprise par ligne |
tags | Labels concaténés ou texte d’origine |
employees | Valeur de metrics.employees |
amount | Valeur de metrics.revenue.amount |
currency | Valeur de metrics.revenue.currency |
createdAt | Date d’origine ou mise en forme |
Pour le premier export, je privilégie des noms de colonnes lisibles. Si le fichier contient des noms identiques dans plusieurs objets, vérifiez l’aperçu avant le téléchargement. Par exemple, billing.amount et revenue.amount ne doivent pas tous deux devenir une colonne ambiguë nommée amount sans vérification.
💡 Ma règle pour l’aplatissement
Aplatissez les champs scalaires que vous souhaitez filtrer, trier ou importer comme colonnes. Conservez les objets ou tableaux structurés au format JSON si leur aplatissement risque de masquer leur sens ou de créer des cellules illisibles.
Gérer les tableaux dans les lignes JSON
Les tableaux demandent une décision spécifique : une cellule CSV contient du texte, alors qu’un tableau JSON peut représenter des données de natures très différentes.
Une liste de tags n’a rien à voir avec une liste de contacts. Une liste d’e-mails ne se traite pas comme une liste de lignes de commande. J’évite donc d’appliquer une règle unique à des tableaux qui n’ont pas le même sens.
Pour le fichier de cet exemple, j’utiliserais les paramètres suivants :
| Champ | Traitement recommandé | Pourquoi |
|---|---|---|
tags | Concaténer les valeurs | Les tags sont de simples labels qui tiennent bien dans une cellule |
website | Concaténer les valeurs ou conserver le JSON | Concaténez pour gagner en lisibilité, ou gardez le JSON si les différences de structure sont importantes |
contacts | Conserver au format JSON pour les lignes d’entreprises | Les objets contacts possèdent leurs propres champs imbriqués |
contacts | Utiliser $.results[].contacts comme nœud pour les lignes de contacts | Solution préférable lorsque la liste de contacts constitue le résultat recherché |
Datablist propose plusieurs options pour gérer les tableaux : concaténer les valeurs, les conserver sous forme de chaînes JSON, ne garder que le premier élément ou appliquer des paramètres au cas par cas.
Ma règle par défaut est simple :
- Concaténez les tableaux simples, comme les tags.
- Conservez les tableaux structurés sous forme de chaînes JSON si vous devez préserver leur contenu.
- Ne gardez que le premier élément uniquement s’il a une signification claire, comme une adresse e-mail principale.
- Changez de nœud de lignes lorsque chaque élément du tableau mérite sa propre ligne.
Pour l’export des entreprises, je conserve contacts comme valeur structurée, car chaque contact possède un nom, des e-mails et des numéros de téléphone. Tout aplatir dans une seule cellule rendrait le CSV difficile à lire, tandis que ne garder que le premier contact entraînerait une perte de données.
Pour un export de contacts, je sélectionnerais plutôt $.results[].contacts. Le CSV contiendrait alors des colonnes propres aux contacts, comme :
| Colonne CSV | Valeur source |
|---|---|
name | Nom du contact |
emails | Liste d’e-mails concaténée ou chaîne JSON |
phones | Liste de numéros concaténée ou chaîne JSON |
Le compromis concerne le contexte. Un export d’entreprises préserve chaque entreprise sur sa propre ligne. Un export de contacts se concentre sur les personnes, mais les champs de l’entreprise parente ne sont pas automatiquement recopiés dans chaque ligne de contact, sauf si l’outil prend en charge cette fonction dans une prochaine version.
Configurer les paramètres de sortie
Une fois le nœud de lignes, l’aplatissement et la gestion des tableaux correctement configurés, réglez la sortie CSV.
Je commence généralement avec les paramètres suivants :
- Séparateur : virgule pour un CSV standard.
- Ligne d’en-tête : activée.
- Format de date : conserver le format d’origine, sauf si le tableur cible exige un format plus lisible.
Utilisez un point-virgule si votre tableur ou vos paramètres régionaux attendent des fichiers séparés par des points-virgules. C’est notamment fréquent avec les configurations européennes, où la virgule sert souvent de séparateur décimal.
Pour les dates, je préfère conserver le format source lors du premier export. Les timestamps ISO sont faciles à analyser par la suite et préservent les informations de fuseau horaire. Si le CSV est destiné à un collègue non technique, une mise en forme des dates peut toutefois améliorer sa lisibilité.
Avant le téléchargement, vérifiez les deux aperçus :
- L’aperçu sous forme de tableau permet de contrôler les lignes et les colonnes.
- L’aperçu du CSV brut permet de vérifier les séparateurs, les guillemets et les sauts de ligne.
🔑 Prévisualisez avant d’exporter
L’aperçu permet de repérer un mauvais nœud de lignes, des colonnes manquantes, des tableaux illisibles ou un séparateur incorrect. Je préfère y consacrer 30 secondes plutôt que de devoir réparer ensuite un import CRM ou un tableur défectueux.
Je vérifie systématiquement l’aperçu du CSV brut lorsque les données comportent des tableaux ou du texte multiligne. Cela ne prend que quelques secondes et permet d’éviter un nombre surprenant de problèmes d’import.
Vérifier et télécharger le CSV
Avant de télécharger le fichier, je passe en revue cette checklist :
- Le nombre de lignes correspond-il au nœud sélectionné ?
- Les lignes représentent-elles bien l’entité recherchée ?
- Les champs
employees,amountetcurrencysont-ils répartis dans des colonnes utiles ? - Les tableaux sont-ils lisibles ou conservés au format JSON lorsque leur structure compte ?
- Les valeurs nulles de chiffre d’affaires sont-elles vides ou suffisamment explicites pour l’étape suivante ?
- Les dates sont-elles adaptées au tableur ou à l’outil d’import ?
- L’aperçu du CSV brut utilise-t-il le séparateur attendu ?
Téléchargez ensuite le CSV. Lorsque vous importez un fichier, le nom du fichier téléchargé peut reprendre celui du fichier source, ce qui facilite la traçabilité du CSV.
Après l’export, ouvrez le fichier dans l’éditeur CSV de Datablist, Excel, Google Sheets ou votre prochain outil de données. Dans Datablist, vous pouvez poursuivre avec le nettoyage, le filtrage, la déduplication, l’enrichissement ou la traduction. Si vous produisez plusieurs exports, vous pouvez comparer deux fichiers CSV. Si le fichier est trop volumineux pour un autre outil, vous pouvez aussi fractionner le CSV en plusieurs fichiers.
Résultat CSV attendu
Avec $.results, le résultat principal comporte une entreprise ou un compte par ligne.
| Colonne CSV | Chemin JSON dans chaque ligne | Valeur attendue |
|---|---|---|
id | $.id | Identifiant de la ligne |
name | $.name | Nom de l’entreprise ou du compte |
website | $.website | Site web, tableau concaténé ou chaîne JSON |
contacts | $.contacts | Tableau de contacts concaténé ou au format JSON avec une entreprise par ligne |
tags | $.tags | Labels concaténés ou chaîne d’origine |
employees | $.metrics.employees | Nombre de salariés |
amount | $.metrics.revenue.amount | Montant du chiffre d’affaires, s’il est renseigné |
currency | $.metrics.revenue.currency | Devise du chiffre d’affaires, si elle est renseignée |
createdAt | $.createdAt | Date d’origine ou mise en forme |
Avec $.results[].contacts, le résultat passe à un contact par ligne.
| Colonne CSV | Chemin JSON dans chaque contact | Valeur attendue |
|---|---|---|
name | $.name | Nom du contact |
emails | $.emails | Liste d’e-mails concaténée ou chaîne JSON |
phones | $.phones | Liste de numéros concaténée ou chaîne JSON |
Les deux exports sont valides, mais ils répondent à des besoins différents.
Utilisez l’export au niveau des entreprises pour nettoyer des comptes, vérifier des données firmographiques, enrichir des fiches d’entreprises ou préparer un import CRM. Choisissez l’export au niveau des contacts lorsque les personnes constituent votre jeu de données cible.
Quand utiliser ce workflow
Ce workflow est utile chaque fois que le JSON constitue le format source, mais que le CSV est votre format de travail.
Quelques cas courants :
- Réponses d’API comportant des métadonnées, une pagination et un tableau
resultsimbriqué. - Résultats de scraping via API contenant des annonces, des produits, des contacts ou des événements.
- Exports CRM et RevOps dans lesquels les entreprises contiennent des contacts, des tags, des métriques et des champs personnalisés.
- Exports de marketplaces ou de catalogues produits avec des variantes, des prix, des catégories et des fournisseurs.
- Logs de webhooks dont les événements sont imbriqués sous un payload.
- Workflows de localisation dans lesquels vous souhaitez traduire le CSV obtenu.
La méthode reste toujours la même : repérez le tableau qui doit fournir les lignes, aplatissez les champs objets utiles, choisissez comment traiter les tableaux, puis prévisualisez le résultat avant l’export.
Résoudre les problèmes de conversion JSON vers CSV
Si le JSON n’est pas valide, commencez par vérifier le fichier source. Des virgules manquantes, des logs de console copiés, du texte ajouté à la fin, un téléchargement incomplet ou des guillemets non échappés peuvent empêcher son analyse. Je valide généralement le fichier avant de modifier les paramètres de conversion, car un JSON invalide doit être corrigé à la source.
Si aucun nœud de lignes n’est détecté, le fichier ne contient peut-être pas de tableau d’objets. Un objet unique composé uniquement de champs scalaires ne suffit pas pour ce workflow. Une racine primitive, une chaîne, un nombre ou une valeur isolée ne permet pas de produire des lignes CSV réellement utiles.
Si les mauvaises lignes apparaissent dans l’aperçu, changez le nœud sélectionné. Le convertisseur a probablement trouvé un tableau, mais pas celui auquel vous pensiez. Recherchez le chemin où se trouvent les enregistrements, comme $.results, $.data.items ou $.payload.records.
Si les contacts, tags, lignes de commande ou événements sont difficiles à lire, modifiez la gestion des tableaux. Concaténez les listes simples. Conservez les tableaux structurés au format JSON pour ne perdre aucun détail. Passez à un nœud enfant lorsque chaque élément imbriqué doit devenir une ligne.
Si un fichier volumineux semble lent à traiter, gardez à l’esprit que les performances du navigateur et de l’appareil restent déterminantes. Datablist exécute l’analyse et la conversion dans un web worker : le traitement ne bloque donc pas le thread principal de l’interface, mais la mémoire et le processeur de votre appareil fixent toujours les limites pratiques.
Si le CSV s’importe mal dans un autre outil, essayez un autre séparateur, laissez la ligne d’en-tête activée et examinez l’aperçu du CSV brut. Les guillemets et les sauts de ligne peuvent avoir leur importance lorsque les valeurs JSON contiennent du texte, des tableaux ou des objets imbriqués.
Ce qui se passe dans le navigateur
Datablist analyse et convertit le JSON dans un worker du navigateur. Celui-ci recherche les nœuds de lignes possibles, met l’objet analysé en cache, convertit le nœud sélectionné en CSV, puis renvoie l’aperçu et le résultat à l’interface.
Ce fonctionnement est important pour deux raisons.
Premièrement, la conversion ne s’exécute pas sur le thread principal de l’interface. La page reste ainsi utilisable pendant l’analyse du fichier.
Deuxièmement, le traitement s’effectue localement dans votre navigateur, sans envoi du fichier aux serveurs de Datablist pour sa conversion. C’est utile lorsque vous manipulez des exports d’API, des résultats de scraping ou des fichiers de données internes que vous ne souhaitez pas transmettre à un convertisseur côté serveur.
Continuez malgré tout à appliquer vos règles habituelles de gestion des données. Le traitement local dans le navigateur est un avantage, mais il ne remplace pas les politiques de confidentialité et de conformité de votre entreprise.
Conclusion
Convertir un JSON imbriqué en CSV consiste avant tout à choisir le bon nœud de lignes. Une fois le tableau destiné à fournir les lignes identifié, le reste devient beaucoup plus simple.
Dans notre exemple, $.results produit une entreprise par ligne. L’aplatissement de metrics.employees, metrics.revenue.amount et metrics.revenue.currency crée des colonnes directement exploitables dans un tableur. Les paramètres des tableaux déterminent ensuite si des champs comme tags, website et contacts deviennent du texte lisible, restent au format JSON ou font l’objet d’un export séparé au niveau des contacts.
Ouvrez le convertisseur JSON vers CSV, importez un export JSON imbriqué, sélectionnez le nœud de lignes, vérifiez l’aperçu, puis téléchargez le CSV. Vous pourrez ensuite ouvrir le fichier exporté dans l’éditeur CSV de Datablist pour le nettoyer, le filtrer, le dédupliquer, l’enrichir ou le traduire.
FAQ
Comment convertir un JSON imbriqué en CSV ?
Utilisez un convertisseur qui permet de sélectionner le tableau JSON destiné à devenir les lignes. Dans Datablist, collez ou importez le JSON, choisissez le nœud de lignes, aplatissez les champs d’objets imbriqués utiles, configurez la gestion des tableaux, prévisualisez le résultat, puis téléchargez le CSV.
Peut-on convertir un JSON dont les données sont sous results ?
Oui. Sélectionnez $.results comme nœud de lignes lorsque chaque élément de results doit devenir une ligne du CSV.
Comment convertir data.items ou payload.records en CSV ?
Choisissez $.data.items ou $.payload.records comme nœud de lignes si ce chemin contient les objets que vous souhaitez convertir en lignes. Le chemin exact dépend de la structure du JSON.
Comment aplatir des champs JSON imbriqués en colonnes CSV ?
Activez l’aplatissement pour les chemins d’objets imbriqués comme metrics.revenue. Vérifiez ensuite les colonnes générées dans l’aperçu avant l’export.
Comment gérer les tableaux présents dans les lignes JSON ?
Concaténez les listes simples comme les tags, conservez les tableaux structurés sous forme de chaînes JSON si vous devez préserver leur contenu, ou choisissez un nœud plus profond lorsque chaque élément du tableau doit devenir sa propre ligne.
Peut-on convertir un gros fichier JSON en CSV en ligne ?
Oui, à condition que votre navigateur et votre appareil puissent traiter le fichier. Datablist utilise un web worker pour l’analyse et la conversion, mais les fichiers très volumineux restent tributaires des performances locales.
Un convertisseur JSON vers CSV en ligne protège-t-il les données privées ?
Le convertisseur de Datablist traite le fichier localement dans votre navigateur au lieu de l’envoyer aux serveurs de Datablist pour sa conversion. Vous devez néanmoins respecter les règles de gestion des données de votre organisation.
Qu’est-ce qu’un nœud de lignes lors d’une conversion JSON vers CSV ?
Un nœud de lignes est le tableau JSON dont les éléments deviennent les lignes du CSV. Par exemple, $.results crée une ligne CSV pour chaque objet contenu dans le tableau results.
Que se passe-t-il si je choisis $.results[].contacts plutôt que $.results ?
Le CSV contient une ligne par contact au lieu d’une ligne par entreprise ou compte. Les champs de l’entreprise parente ne sont pas ajoutés automatiquement, sauf si l’outil prend en charge ce comportement dans une prochaine version.
Que faire après avoir exporté le CSV ?
Ouvrez-le dans Datablist ou dans un autre tableur pour le nettoyer, le filtrer, le dédupliquer, l’enrichir, le traduire ou l’importer dans un autre système.






