Ce que veut dire aplatir des données JSON
Le CSV est plat : des lignes et des colonnes, rien d’autre. Le JSON est un arbre : des objets dans des objets, des listes dans des objets, des objets dans des listes. Aplatir des données JSON, en anglais to flatten the JSON data, c’est transformer cet arbre en tableau sans perdre les informations dont vous avez vraiment besoin. Chaque outil d’aplatissement fait les mêmes trois mouvements, et une fois que vous savez les nommer, chaque outil devient prévisible, quel que soit le logiciel que vous utilisez. Cette prévisibilité compte parce que les tableurs, les bases de données et les outils d’analyse attendent tous un tableau plat, et parce qu’un mauvais choix d’aplatissement se voit rarement tout de suite, il se paie plus tard, au moment du tri, du filtre ou du calcul.
Les trois mouvements sont les suivants : les objets imbriqués deviennent des colonnes à notation pointée (customer devient customer.name et customer.city) ; les listes de valeurs simples deviennent une seule cellule jointe (items devient book; pen) ; et les listes que vous devez analyser deviennent une ligne par élément, ce qu’on appelle éclater. Le mouvement qui s’applique à chaque liste est toute la compétence, et c’est une décision, pas un réglage par défaut que l’on subit. Un même fichier peut donc demander les trois mouvements à la fois, selon la place de chaque champ : un objet client se met en notation pointée, une liste d’étiquettes se joint, et une liste de lignes de commande s’éclate, parce que chaque partie du fichier joue un rôle différent dans l’analyse.
Une distinction compte avant tout le reste. Notre guide précédent sur l’aplatissement de JSON vers CSV décrit exactement ce que fait l’interrupteur d’aplatissement du convertisseur de ce site, cellule par cellule, y compris ses cas limites. Ce guide porte sur le travail lui-même : vous avez des données JSON imbriquées, vous voulez un tableau plat, et vous choisissez comment chaque partie s’aplatit, dans n’importe quel outil, y compris ceux qui n’ont aucun interrupteur. Une fois que vous maîtrisez les trois mouvements, vous pouvez les appliquer dans Python, dans jq, dans Excel ou dans un convertisseur en ligne, et vous obtenez le même tableau, avec les mêmes compromis, partout.
L’exemple détaillé : trois commandes imbriquées
Tous les exemples de ce guide utilisent le même petit jeu de données, trois commandes avec un objet client imbriqué, une liste items et une liste vide dans la troisième commande. Il est assez petit pour être vérifié à la main, et assez imbriqué pour montrer chaque décision. Gardez cet exemple en tête pendant tout le guide, car chaque recette et chaque sortie CSV ci-dessous part de ces trois commandes, et chaque règle s’y vérifie en quelques secondes, sans avoir à imaginer un fichier plus grand. La première commande a deux articles, la deuxième en a un seul, et la troisième n’en a aucun, ce qui suffit à montrer la jointure, l’éclatement et le cas de la liste vide.
[
{ "orderId": "A-101", "customer": { "name": "Ana", "city": "Madrid" }, "items": ["book", "pen"], "total": 19.99 },
{ "orderId": "A-102", "customer": { "name": "Ken", "city": "Osaka" }, "items": ["lamp"], "total": 42.50 },
{ "orderId": "A-103", "customer": { "name": "Lina", "city": "Berlin" }, "items": [], "total": 7.25 }
]Mouvement 1 : les objets imbriqués deviennent des colonnes à notation pointée
Un objet imbriqué possède des champs nommés, donc l’aplatir est mécanique : on descend dans l’arbre et on joint les noms de clés avec des points. customer.name contient Ana, customer.city contient Madrid, et l’imbrication d’origine disparaît sans rien perdre, parce que le nom pointé enregistre le chemin complet vers la source. Vous pouvez donc retrouver l’origine de chaque colonne, même après avoir oublié la forme du JSON de départ, et deux champs qui portent le même nom dans deux objets différents ne se confondent plus, parce que leurs préfixes les distinguent.
C’est le mouvement sur lequel tous les outils s’accordent. Le convertisseur en ligne le fait, json_normalize de pandas le fait, jq le fait quand vous nommez les chemins explicitement. La profondeur est le seul jugement à exercer : un ou deux niveaux de points restent lisibles, quatre niveaux (a.b.c.d) signifient en général que vous aplatissez une structure qui n’a jamais été pensée comme une ligne de tableau, et c’est le sujet de la section sur la profondeur ci-dessous. Quand un chemin devient trop long pour être lu d’un coup d’œil, c’est souvent le signe qu’il faut arrêter d’aplatir et garder le reste en texte JSON.
orderId,customer.name,customer.city,items,total
A-101,Ana,Madrid,book; pen,19.99
A-102,Ken,Osaka,lamp,42.50
A-103,Lina,Berlin,,7.25Mouvement 2 : les listes courtes deviennent une seule cellule jointe
Une liste de valeurs simples, des chaînes ou des nombres sans imbrication propre, s’aplatit en une seule cellule en joignant les valeurs avec un séparateur. Le convertisseur de ce site joint avec un point-virgule suivi d’un espace (book; pen). Le point-virgule est un choix délibéré : les virgules entreraient en collision avec le délimiteur CSV, tandis qu’un point-virgule dans une cellule ne prête pas à confusion et survit à un aller-retour dans Excel. Le résultat reste lisible par une personne et utilisable par un tableur, sans colonnes supplémentaires et sans lignes supplémentaires.
La jointure garde une ligne par enregistrement, ce que vous voulez quand la liste est un contexte, pas le sujet. Les étiquettes d’un article, les compétences d’un profil, les catégories d’un produit : vous allez les lire, peut-être filtrer dessus, mais vous n’allez pas additionner ou compter les valeurs une par une. Joignez ces listes, et gardez votre tableau à une ligne par enregistrement. Le tableau reste alors facile à trier, à filtrer et à partager, parce que chaque ligne correspond encore à un objet réel, une commande, un article ou un profil, et non à un fragment de cet objet.
orderId,items
A-101,book; pen
A-102,lamp
A-103,Mouvement 3 : éclater une liste en une ligne par élément
Éclater est le mouvement que la plupart des gens manquent, parce que la plupart des convertisseurs ne le proposent jamais. Au lieu de comprimer une liste dans une seule cellule, vous créez une ligne par élément et vous répétez les champs parents sur chaque ligne. La commande A-101, avec deux articles, devient deux lignes : une pour book, une pour pen, chacune portant Ana, Madrid et 19.99. Trois commandes deviennent quatre lignes, parce que la liste vide de A-103 donne quand même une ligne avec un article vide, donc la commande elle-même n’est jamais supprimée en silence. Le nombre de lignes change, et c’est normal : le tableau ne compte plus les commandes, il compte les articles.
Éclatez quand la liste est l’unité d’analyse : les lignes d’articles que vous allez additionner, les événements que vous allez compter, les transactions que vous allez filtrer. Si vous joignez ces listes à la place, les nombres par article restent coincés dans une cellule de texte, et aucune formule de tableur ne les récupère proprement. La règle pratique : si vous allez un jour filtrer, compter ou additionner sur des valeurs isolées dans la liste, éclatez-la. Si la liste n’est jamais lue que comme un tout, joignez-la. Cette règle suffit dans la plupart des cas réels, et elle évite l’erreur la plus coûteuse, celle qui transforme des nombres calculables en texte décoratif.
Une fois éclaté, l’exemple détaillé devient cinq lignes en comptant l’en-tête : A-101 deux fois (book, puis pen), A-102 une fois (lamp), A-103 une fois avec un article vide. Les champs de la commande se répètent sur chaque ligne, ce qui semble redondant et qui est exactement le but : chaque ligne est maintenant un fait analysable.
Éclater ou joindre ? Décider selon le sens de la liste
La décision éclater ou joindre est le seul endroit où l’aplatissement se trompe discrètement, parce que les deux sorties ressemblent à du CSV valide. Une liste jointe de lignes d’articles s’ouvre très bien dans Excel, et rien ne vous prévient que les prix par article sont devenus du texte irrécupérable. Posez une question par liste avant de l’aplatir, et le choix se fait de lui-même. Prenez le temps de répondre pour chaque liste séparément, car deux listes dans le même fichier peuvent demander deux choix opposés, et un choix global pour tout le fichier est presque toujours faux pour au moins une liste.
- Vais-je filtrer, compter ou additionner sur des valeurs isolées dans cette liste ? Si oui, éclatez-la. Les lignes d’articles, les événements, les transactions et les mesures entrent tous ici.
- La liste n’est-elle jamais lue que comme un tout ? Si oui, joignez-la. Les étiquettes, les catégories, les compétences et les libellés entrent tous ici.
- Hésitez-vous ? Éclatez. Un tableau éclaté peut toujours être regroupé pour revenir à des cellules jointes, mais une cellule jointe ne peut pas être redécoupée en lignes de façon fiable, parce que le séparateur peut aussi apparaître dans une valeur.
- La liste contient-elle des objets, pas des valeurs simples ? Alors aucun des deux mouvements ne s’applique directement : une liste d’objets devient une cellule de texte JSON quand on la joint, ou demande que ses champs soient mis en notation pointée avant d’être éclatée. Voir la section sur la profondeur pour ce cas.
Jusqu’à quelle profondeur faut-il aplatir ?
Aplatir jusqu’aux feuilles semble rigoureux, et cela produit les pires tableaux : des dizaines de colonnes avec des noms pointés à quatre niveaux, la plupart vides, aucune lisible. Aplatissez jusqu’à la profondeur que vous allez vraiment utiliser. Si vous allez filtrer ou trier sur un champ, donnez-lui une colonne. Si vous ne ferez que le lire dans son contexte, laissez ce sous-arbre en une seule cellule de texte JSON. Le but n’est pas de montrer toute la structure, c’est de produire un tableau qui sert à une analyse précise, sans bruit et sans colonnes que personne ne lira.
Une règle d’arrêt pratique : aplatissez deux à trois niveaux de profondeur, et gardez tout ce qui est plus profond en texte JSON. Une liste de suivi d’objets d’expédition, par exemple, est une vraie donnée, mais elle appartient rarement aux colonnes : une seule cellule de suivi qui contient le texte JSON garde le tableau lisible, et le fichier JSON d’origine garde le détail complet. Le CSV aplati est une vue dérivée de vos données, pas un remplacement, alors gardez le fichier JSON d’origine. Quand l’analyse change, vous réaplatissez depuis la source, au lieu de bricoler un CSV déjà appauvri.
Données irrégulières : clés manquantes, listes vides et valeurs nulles
Le vrai JSON est irrégulier : un enregistrement possède un champ que le suivant n’a pas, une liste est vide, une valeur est nulle. L’aplatissement traite les trois cas avec la même règle ennuyeuse, et ennuyeux est ce que vous voulez : la ligne d’en-tête est l’union de chaque clé trouvée n’importe où dans les données, et tout enregistrement auquel il manque une clé reçoit une cellule vide à cet endroit. Pas d’erreur, pas de ligne supprimée, juste une cellule vide que vous pouvez voir. Cette prévisibilité rend le tableau fiable : une cellule vide veut dire que la donnée manque, pas que l’outil a échoué.
Les listes vides et les valeurs nulles suivent la même règle dans les deux mouvements. Jointe, une liste vide devient une cellule vide. Éclatée, une liste vide donne quand même une ligne avec un article vide, donc l’enregistrement parent survit. Une valeur nulle dans une liste devient un segment vide entre les séparateurs : une liste de mug, null et plate se joint en mug; ; plate, avec le vide visible exactement là où se trouvait la valeur nulle. Vous pouvez ainsi distinguer une liste vide, une valeur manquante et une valeur nulle, au lieu de les confondre.
orderId,items
A-101,book; pen
A-103,mug; ; plateRecette 1 : Python, json_normalize plus explode
Python avec pandas est la voie la plus indulgente, parce que json_normalize aplatit les objets et explode gère les listes en deux lignes lisibles. Lancée sur le jeu de trois commandes, json_normalize a produit les colonnes orderId, items, total, customer.name et customer.city, et explode sur items a transformé 3 lignes en 4, avec la liste vide qui laisse une ligne avec un article vide. Vous obtenez un tableau propre, prêt pour un filtre, un regroupement ou une exportation vers Excel, sans écrire de code de parcours d’arbre vous-même.
import json
import pandas as pd
rows = json.load(open('orders.json'))
df = pd.json_normalize(rows)
flat = df.explode('items')
flat.to_csv('orders-flat.csv', index=False)Si vous voulez le mouvement joindre au lieu d’éclater, sautez la ligne explode : json_normalize laisse la liste sous forme de liste, et une jointure en une ligne la transforme en cellule séparée par des points-virgules. Le même script couvre donc les deux décisions, et c’est pourquoi c’est la recette à prendre quand l’aplatissement n’est pas un cas unique.
Recette 2 : jq, éclater en une seule commande
jq éclate une liste en une seule commande, sans fichier de script et sans dépendance au-delà de jq lui-même. La recette ci-dessous lie chaque commande à une variable, vérifie si sa liste items est vide, et émet soit une ligne avec un article vide, soit une ligne par article. Lancée sur l’exemple détaillé, elle a produit exactement la sortie en cinq lignes décrite dans la section éclatement : A-101 deux fois, A-102 une fois, A-103 une fois avec un article vide. Le format CSV est produit par la fonction intégrée, donc les guillemets et les virgules sont gérés correctement, même si une valeur contient un séparateur.
jq -r '. as $rows | (["orderId","name","city","item","total"] | @csv), ($rows[] | . as $o | if (.items | length) == 0 then [$o.orderId, $o.customer.name, $o.customer.city, "", $o.total] | @csv else (.items[] | [$o.orderId, $o.customer.name, $o.customer.city, ., $o.total] | @csv) end)' orders.jsonLa branche pour liste vide est la partie que la plupart des recettes jq d’éclatement en ligne omettent, et c’est la partie qui perd des données : sans elle, les commandes sans articles disparaissent entièrement de la sortie. Gardez-la, même quand vos données actuelles n’ont pas de listes vides, parce que le prochain fichier en aura.
Recette 3 : Excel Power Query, sans code
Si votre destination est Excel de toute façon, Power Query aplatit le JSON sans aucun code. Importez avec Données, puis Obtenir des données, puis À partir d’un fichier, puis À partir de JSON, et Power Query affiche chaque enregistrement comme une ligne avec les colonnes imbriquées encore repliées. Les deux opérations d’expansion correspondent exactement aux deux mouvements de liste de ce guide, et choisir la mauvaise est la même erreur que dans n’importe quel outil. L’aperçu de Power Query vous montre le résultat avant le chargement, ce qui permet de corriger un mauvais choix avant qu’il touche votre classeur.
- Développez une colonne d’enregistrement (customer) avec la flèche de développement, puis cochez les champs voulus : name et city deviennent des colonnes simples. C’est le mouvement 1.
- Développez une colonne de liste (items) avec la flèche de développement et choisissez Développer vers de nouvelles lignes pour l’éclater : une ligne par élément, champs parents répétés. C’est le mouvement 3.
- Développez une colonne de liste et choisissez Extraire les valeurs, avec un séparateur point-virgule espace, pour la joindre en une seule cellule. C’est le mouvement 2.
- Répétez pour chaque colonne imbriquée jusqu’à ce que le tableau soit plat à la profondeur voulue, puis Fermer et charger.
Recette 4 : le convertisseur en ligne, joint mais n’éclate jamais
Le convertisseur gratuit de ce site aplatit avec son interrupteur d’aplatissement activé : les objets imbriqués deviennent des colonnes à notation pointée et les listes se joignent en cellules séparées par des points-virgules, exactement les mouvements 1 et 2. Avec l’interrupteur désactivé, les valeurs imbriquées restent en texte JSON dans leurs cellules, ce qui est l’option laisser imbriqué du titre. Ce que le convertisseur ne fait pas, c’est éclater : il n’existe aucune option qui transforme une commande en une ligne par article. Pour la plupart des fichiers du quotidien, joindre suffit, et c’est pour cela que le convertisseur reste le choix le plus rapide.
C’est une limite honnête, pas un bogue. Éclater change le nombre de lignes, ce qui est une décision de modélisation des données, et un convertisseur en un clic ne devrait pas la prendre en silence. Si votre liste demande un éclatement, utilisez la recette Python ou jq ci-dessus, et utilisez le convertisseur pour les nombreux fichiers où la jointure est le bon choix. Vous gardez ainsi le contrôle sur la décision qui change vraiment la forme de votre tableau.
Peut-on revenir en arrière et désaplatir ?
L’aplatissement est facile à inverser pour les objets et difficile à inverser exactement pour les listes éclatées, alors prévoyez-le. Les colonnes pointées se redivisent en objets imbriqués avec un petit script, et rien n’est perdu, parce que les points ont enregistré le chemin complet. Les lignes éclatées se regroupent avec un regroupement sur la clé parente, en collectant de nouveau les articles dans une liste, mais l’ordre d’origine des articles ne survit que si vous avez gardé un index de ligne, et les listes vides d’origine ne se distinguent plus des listes manquantes. La réversibilité dépend donc de ce que vous avez conservé pendant l’aplatissement.
La règle pratique en découle : ne traitez jamais le CSV aplati comme votre seule copie. Gardez le fichier JSON d’origine, traitez le CSV comme une vue dérivée construite pour une analyse, et réaplatissez à partir du JSON quand l’analyse change. Le stockage coûte peu, et repartir de la source vaut mieux que déboguer un CSV qui a perdu sa structure en silence. Cette habitude simple vous évite la plupart des pertes de données que l’on attribue à tort à l’aplatissement.
Liste de contrôle pour aplatir
Avant d’aplatir un fichier JSON, passez ces six vérifications. Elles prennent une minute, et elles attrapent chaque mode d’échec de ce guide. Faites-les dans l’ordre, parce que la première, l’unité d’analyse, détermine toutes les autres.
- Nommez d’abord l’unité d’analyse : une ligne par commande, par article ou par événement ? Cette réponse choisit éclater ou joindre pour chaque liste.
- Aplatissez les objets jusqu’à la profondeur sur laquelle vous allez filtrer ou trier, et laissez les sous-arbres plus profonds en texte JSON.
- Vérifiez chaque liste : les valeurs simples se joignent ou s’éclatent proprement, mais une liste d’objets demande que ses champs soient mis en notation pointée avant que l’un ou l’autre mouvement ait du sens.
- Attendez-vous à des données irrégulières : les clés manquantes deviennent des cellules vides, les listes vides deviennent une ligne vide ou une cellule vide, les valeurs nulles deviennent des segments vides.
- Surveillez les points dans les noms de clés : une clé comme version.2 entre en collision avec un chemin imbriqué du même nom, et l’un des deux gagne en silence.
- Gardez le JSON d’origine. Le CSV aplati est une vue dérivée, pas la source de vérité.
Guides associés
- Comment aplatir JSON en CSV : ce que fait vraiment l’interrupteur (Guide 2026)
- Comment convertir JSON en CSV : 3 méthodes fiables (guide 2026)
- Comment convertir un fichier JSON en CSV : envoi, Excel et ligne de commande (Guide 2026)
- Existe-t-il un moyen de convertir JSON en CSV ? Oui — 5 méthodes, choisissez selon votre situation (Guide 2026)
- Comment faire JSON to CSV en ligne : convertissez dans cet onglet en 30 secondes (Guide 2026)
- json to csv converter download : ce qu'il faut vraiment télécharger (Guide 2026)
- Convert Large JSON to CSV Online Free : jusqu'où un navigateur peut-il vraiment aller ? (Guide 2026)
- Qu'est-ce qu'un fichier JSON et CSV ? Guide débutant des deux formats (Guide 2026)
- What Does Flattening a JSON Mean? Le terme expliqué de A à Z (Guide 2026)
- what is JSON to CSV online : la signification des trois mots, expliquée (guide 2026)
- what is JSON to CSV converter online : anatomie d'un convertisseur JSON en CSV en ligne (guide 2026)
- convert json to csv locally : convertir JSON en CSV sur votre propre machine, sans rien envoyer (Guide 2026)
- Quelles sont les façons de convertir JSON en CSV localement ? 6 méthodes comparées (Guide 2026)
- Votre CSV s'ouvre dans une seule colonne dans Excel : pourquoi et comment le corriger (Guide 2026)
- Pourquoi votre CSV affiche des caractères spéciaux illisibles dans Excel, et comment corriger l'encodage (Guide 2026)
- Pourquoi Excel supprime les zéros non significatifs de vos codes CSV, et comment les conserver (Guide 2026)
- Pourquoi Excel change les dates de votre CSV, et comment les conserver (Guide 2026)
- Pourquoi l'enregistrement de votre CSV dans Excel le modifie, et comment protéger l'original (Guide 2026)
- Fichier CSV trop volumineux pour Excel : pourquoi Excel ne l'ouvre pas et que faire à la place (Guide 2026)
Questions fréquentes
Que veut dire aplatir des données JSON ?
Cela veut dire transformer un arbre JSON imbriqué en tableau plat de lignes et de colonnes. Les objets imbriqués deviennent des colonnes à notation pointée (customer.name), les listes de valeurs simples se joignent en une seule cellule (book; pen) ou s’éclatent en une ligne par élément, et tout ce que vous n’aplatissez pas reste en texte JSON dans une cellule.
Faut-il aplatir le JSON imbriqué avant de convertir en CSV ?
Oui, sauf si vous voulez du texte JSON dans vos cellules CSV. Le CSV n’a pas d’imbrication, donc les données imbriquées doivent s’aplatir, se joindre ou rester en texte. Aplatir avec l’interrupteur activé vous donne de vraies colonnes sur lesquelles filtrer et trier ; le laisser désactivé garde les valeurs imbriquées en texte JSON lisible dans des cellules uniques.
Comment éclater un tableau JSON en lignes, une par élément ?
Éclatez-le. En Python : pd.json_normalize(rows) puis df.explode appliqué à items. En jq : liez chaque enregistrement à une variable et émettez une ligne par élément, avec une branche explicite pour les listes vides afin que les enregistrements sans articles ne soient pas supprimés. Les deux recettes sont dans ce guide et ont été vérifiées sur l’exemple détaillé.
Comment aplatir du JSON en Python ?
Utilisez pandas : chargez le fichier avec json.load, pd.json_normalize(rows) pour aplatir les objets imbriqués en colonnes à notation pointée, puis joignez les colonnes de listes avec un séparateur ou utilisez df.explode sur items pour obtenir une ligne par élément. Pour les objets imbriqués sans pandas, une petite fonction récursive qui construit des clés pointées fait le même travail.
Comment aplatir du JSON dans Excel ?
Utilisez Power Query : Données, Obtenir des données, À partir d’un fichier, À partir de JSON. Développez les colonnes d’enregistrements pour aplatir les objets imbriqués, et développez les colonnes de listes avec Développer vers de nouvelles lignes pour éclater ou Extraire les valeurs pour joindre. Répétez par colonne imbriquée, puis Fermer et charger.
Que deviennent les listes vides et les valeurs nulles quand on aplatit du JSON ?
Elles deviennent des cellules vides ou des segments vides, jamais des erreurs. Une clé manquante donne une cellule vide, une liste vide se joint en cellule vide ou s’éclate en une ligne avec un article vide, une valeur nulle devient une cellule vide, et une valeur nulle dans une liste devient un segment vide entre séparateurs (mug; ; plate).
Peut-on aplatir du JSON en ligne sans rien installer ?
Oui. Collez du JSON ou envoyez un fichier dans un convertisseur en ligne gratuit avec l’aplatissement activé : les objets imbriqués deviennent des colonnes à notation pointée et les listes se joignent en une seule cellule. Si vous devez éclater une liste en une ligne par élément, utilisez plutôt la recette Python ou jq de ce guide, parce que les convertisseurs en ligne joignent les listes et ne les éclatent pas.
JSON imbriqué ? Aplatissez-le dans le navigateur, gratuitement
Collez du JSON ou envoyez un fichier : les objets imbriqués s’aplatissent en colonnes à notation pointée, les listes se joignent en cellules propres, et le téléchargement est en UTF-8 simple. Gratuit, sans inscription, tout se passe dans votre navigateur.
Ouvrir le convertisseur JSON vers CSV