JSON Flatten

Séparateur:
Profondeur max.:(0=unlimited)

Outil en ligne pour aplatir et désaplatir du JSON. En un clic, convertissez un JSON imbriqué en paires clé-valeur à un seul niveau séparées par des points. Séparateur personnalisable, expansion d'index de tableaux et restauration inverse, le tout traité localement pour la confidentialité.

Recommandations connexes

Cas d'utilisation

  • Requêtes et agrégations MongoDB : convertissez un JSON imbriqué en structure plate à notation pointée pour l'utiliser directement dans les requêtes find, les instructions update et les pipelines d'agrégation, sans écrire les chemins à la main
  • Export CSV / Excel : aplatissez les objets imbriqués sur plusieurs niveaux et utilisez les clés à notation pointée comme en-têtes de colonnes lors de l'import dans un DataFrame Pandas ou dans Excel, avec un enregistrement par ligne
  • Indexation Elasticsearch : les documents plats se stockent et s'interrogent plus facilement dans un moteur de recherche ; déployez tous les champs de tableaux imbriqués en paires clé-valeur à un seul niveau
  • Débogage d'API : comparez côte à côte les structures imbriquées des requêtes et des réponses ; les noms de champs aplatis sont plus intuitifs et facilitent la détection de champs manquants ou d'erreurs de type
  • Prétraitement de fichiers de configuration : transformez des configurations imbriquées comme package.json ou settings.json en variables d'environnement plates, prêtes à injecter dans des conteneurs Docker ou des pipelines CI
  • Journaux et surveillance : aplatissez les événements de journaux profondément imbriqués avant de les écrire dans un entrepôt de données, pour pouvoir les agréger et les visualiser par champ

Comment utiliser

  1. Collez le JSON à traiter dans la zone de saisie de gauche, ou cliquez sur le bouton Téléverser pour choisir un fichier .json local. Vous pouvez aussi cliquer sur Exemple pour charger un exemple imbriqué prédéfini
  2. Basculez entre les modes Aplatir et Désaplatir dans la barre d'outils, puis réglez le séparateur, le mode de traitement des tableaux et la profondeur maximale d'expansion dans le panneau d'options en bas
  3. L'outil traite automatiquement en temps réel ; le panneau de droite affiche instantanément le résultat ainsi que le nombre de clés et la profondeur maximale
  4. Cliquez sur Copier pour envoyer le résultat dans le presse-papiers, ou sur Télécharger pour l'enregistrer en fichier .json sur votre appareil

Fonctionnalités

  • Conversion bidirectionnelle : prend en charge l'aplatissement et le désaplatissement du JSON pour basculer sans perte entre structures imbriquée et plate
  • Séparateur personnalisable : par défaut le point, vous pouvez aussi utiliser un trait de soulignement, une barre oblique, un double trait de soulignement ou n'importe quel caractère pour s'adapter à différents systèmes en aval
  • Traitement configurable des tableaux : dépliez les tableaux en clés indexées (items.0, items.1) ou conservez-les comme valeur unique, pour couvrir aussi bien les flux tabulaires que les flux de configuration
  • Limite de profondeur maximale : plafonnez la profondeur d'expansion pour éviter des clés trop longues issues de structures profondément imbriquées
  • Statistiques en temps réel : après traitement, affiche instantanément le nombre total de clés et la profondeur maximale pour évaluer la taille de la sortie
  • Traitement local pour la confidentialité : toute l'analyse et la conversion s'effectuent dans le navigateur ; les données JSON ne sont jamais envoyées, idéal pour les API sensibles et les configurations de production
  • Téléversement de fichier et données d'exemple : téléversez un fichier .json ou chargez l'exemple intégré en un clic pour vérifier rapidement la conversion
  • Copie et téléchargement : copiez le résultat dans le presse-papiers ou téléchargez-le en fichier .json standard en un clic pour le réutiliser

Exemples de code

Aplatir du JSON en JavaScript

javascript
function flatten(obj, prefix = '', sep = '.') {
  return Object.entries(obj).reduce((acc, [key, value]) => {
    const newKey = prefix ? `${prefix}${sep}${key}` : key;
    if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
      Object.assign(acc, flatten(value, newKey, sep));
    } else {
      acc[newKey] = value;
    }
    return acc;
  }, {});
}

flatten({ user: { name: 'Alice', contact: { email: 'a@x.com' } } });
// => { 'user.name': 'Alice', 'user.contact.email': 'a@x.com' }

Aplatir du JSON en Python

python
def flatten(obj, parent_key='', sep='.'):
    items = {}
    for key, value in obj.items():
        new_key = f"{parent_key}{sep}{key}" if parent_key else key
        if isinstance(value, dict):
            items.update(flatten(value, new_key, sep))
        else:
            items[new_key] = value
    return items

import json
print(json.dumps(flatten({'user': {'name': 'Alice'}}), indent=2))
# => {"user.name": "Alice"}

Aplatir du JSON avec jq en ligne de commande

bash
# Convertir un JSON imbriqué en structure plate à notation pointée
jq '[paths(scalars) as $p | {"key": $p | join("."), "value": getpath($p)}] | from_entries' data.json

# Restaurer un JSON plat en structure imbriquée
# Utilisez un filtre tiers avec jq 1.7+, ou directement le mode Désaplatir de cet outil.

FAQ

Qu'est-ce que l'aplatissement JSON et quand en a-t-on besoin ?

L'aplatissement JSON consiste à convertir un objet ou un tableau imbriqué sur plusieurs niveaux en une structure de paires clé-valeur à un seul niveau, où les clés imbriquées sont jointes par un séparateur (par défaut le point). Par exemple, {"user":{"name":"Alice"}} devient {"user.name":"Alice"}. Vous en avez besoin dès que vous voulez exporter un JSON imbriqué en CSV, exécuter des requêtes MongoDB à notation pointée, indexer dans Elasticsearch, transformer une configuration en variables d'environnement, ou alimenter un système en aval qui n'accepte que des clés plates.

Le JSON aplati peut-il être restauré en structure imbriquée ?

Oui. Cet outil intègre un mode Unflatten. Tant que le séparateur est identique, il restaure sans perte les paires clé-valeur plates en objets et tableaux imbriqués d'origine, et il détecte automatiquement les indices entiers consécutifs (0, 1, 2…) pour les reconstituer en tableau, sans qu'aucun réglage supplémentaire ne soit nécessaire.

Peut-on personnaliser le séparateur ? Comment les tableaux sont-ils traités ?

Oui. Le séparateur peut être un point, un trait de soulignement, une barre oblique, un double trait de soulignement ou tout autre caractère, jusqu'à 3 caractères. Deux modes existent pour les tableaux : par défaut, chaque élément est déployé en clé numérique (items.0, items.1) ; vous pouvez aussi cocher l'option pour conserver tout le tableau en valeur unique. Vous pouvez également définir une profondeur maximale d'expansion (0 = illimitée), et toute imbrication plus profonde est conservée en bloc pour éviter des clés trop longues.

Traiter du JSON en ligne risque-t-il de fuite mes données ?

Non. Toute l'analyse, l'aplatissement et le désaplatissement s'exécutent localement dans votre navigateur. Les données JSON ne sont jamais transmises à un serveur. Les API de production, la configuration en service et les données personnelles ne quittent jamais votre appareil, vous pouvez donc l'utiliser en toute confiance.

Comment utiliser JSON Flatten avec MongoDB ?

MongoDB utilise par défaut la notation pointée pour accéder aux champs imbriqués. Par exemple, pour rechercher les documents où user.contact.email vaut alice@example.com, la commande est { "user.contact.email": "alice@example.com" }. Après avoir converti votre JSON imbriqué en structure plate à notation pointée grâce à cet outil, les clés obtenues peuvent être collées directement dans les requêtes find, les instructions update et les pipelines d'agrégation, ce qui évite de saisir les chemins à la main.

Comment exporter le JSON aplati en CSV ou Excel ?

La sortie aplatie est déjà une structure clé-valeur à un seul niveau, où tous les champs d'un enregistrement se trouvent au même niveau. Vous pouvez la copier directement dans notre outil JSON vers CSV, ou l'importer dans Excel ou Pandas en utilisant les clés à notation pointée comme en-têtes de colonnes. Pour les tableaux d'objets, limitez la profondeur maximale ou conservez le tableau en bloc afin d'éviter qu'un même enregistrement soit éclaté sur plusieurs lignes.

Quand utiliser un trait de soulignement ou une barre oblique comme séparateur ?

Le point (user.address.city) est le choix le plus universel, adapté aux objets JS et aux requêtes MongoDB. Le trait de soulignement (user_address_city) convient aux noms de colonnes SQL, aux noms de variables Python et aux variables d'environnement. La barre oblique (user/address/city) ressemble à un chemin de fichier et est fréquente dans les paramètres de chemin d'API REST. Le double trait de soulignement (user__address__city) est pratique pour les configurations de type Django qui utilisent déjà abondamment le trait de soulignement.

Que se passe-t-il si mes noms de clés contiennent des points ou des traits de soulignement ?

Un conflit survient. Par exemple, une clé nommée user.name aplatie avec un point comme séparateur devient user.name.name, et le désaplatissement la décompose en user → name → name sur deux niveaux. Si vos noms de clés contiennent le caractère séparateur, basculez sur un séparateur qui n'apparaît pas dans vos clés (barre oblique, double trait de soulignement ou caractère personnalisé), ou échappez / renommez les clés d'origine avant traitement.

Comment les objets à l'intérieur d'un tableau sont-ils déployés ?

Par défaut, ils sont déployés avec des index numériques. Par exemple, deux objets dans un tableau orders deviennent orders.0.id, orders.0.total, orders.1.id, orders.1.total. Si votre système en aval attend une table à une ligne par enregistrement, cette structure correspond directement à plusieurs lignes CSV. Au désaplatissement, les indices entiers consécutifs (0, 1, 2…) sont automatiquement restaurés en tableau sans qu'aucun commutateur supplémentaire ne soit requis.

De très gros fichiers JSON risquent-ils de bloquer la page ?

Cet outil s'exécute dans votre navigateur. Les réponses d'API classiques (de quelques dizaines à quelques centaines de Ko) sont traitées en quelques secondes. Pour les fichiers très volumineux (plusieurs Mo et au-delà), privilégiez un outil en ligne de commande local tel que jq pour éviter la pression sur la mémoire du navigateur. Si vous devez malgré tout les traiter en ligne, compressez ou élaguez d'abord les champs, ou découpez le JSON en lots à aplatir un par un.

À quoi sert la limite de profondeur maximale ?

La limite de profondeur maximale plafonne l'expansion au niveau que vous indiquez, et toute imbrication plus profonde est conservée comme une valeur unique. Elle a deux usages principaux : d'abord, empêcher les configurations profondément imbriquées de produire des clés trop longues ; ensuite, respecter la limite de longueur des noms de colonnes en aval (certaines colonnes SQL Server sont plafonnées à 128 caractères). La valeur par défaut 0 signifie aucune limite ; ajustez-la selon votre cas.

Puis-je enregistrer ou réutiliser le résultat converti ?

Oui. Après traitement, vous pouvez copier le résultat dans le presse-papiers en un clic, ou le télécharger directement en fichier .json standard. Tout se fait localement, sans inscription, et rien n'est mis en cache côté serveur.

Dépannage

Le message « L'entrée n'est pas un JSON valide » s'affiche

Cause : le texte JSON contient une erreur de syntaxe (guillemets manquants, virgules parasites, crochets non fermés, booléens à la Python True/False). Solution : validez d'abord le JSON avec le formateur / validateur intégré. Rappel : les booléens et null doivent être en minuscules sans guillemets, et les clés doivent être entre guillemets doubles.

Après aplatissement, les noms de clés entrent en conflit et le désaplatissement casse les niveaux

Cause : une clé d'origine contient déjà le séparateur choisi (par exemple user.name aplati avec un point). Solution : basculez sur un séparateur qui n'apparaît pas dans vos clés (barre oblique, double trait de soulignement ou caractère personnalisé), ou échappez / renommez les clés d'origine avant traitement.

Mon tableau est éclaté sur plusieurs lignes du CSV

Cause : par défaut, les éléments du tableau sont déployés avec des index numériques, si bien que chaque élément produit son propre jeu de paires clé-valeur qui, croisé avec les autres champs, donne plusieurs enregistrements. Solution : si vous voulez une ligne par objet, cochez « Conserver le tableau comme valeur unique », ou désactivez le déploiement des champs de tableau dans l'outil CSV. Si vous voulez une ligne par élément de tableau, c'est le comportement attendu.

Le résultat du désaplatissement n'est pas un tableau

Cause : seules les clés comportant des indices entiers consécutifs (0, 1, 2…) sont restaurées en tableaux. Les clés comme orders.first ou orders.second sont traitées comme des clés d'objet. Solution : évitez de renommer les indices numériques à l'aplatissement, ou réécrivez manuellement les noms des champs de tableau en forme numérique pure (orders.0, orders.1) avant de désaplatir.

Les noms de colonnes de ma base de données sont tronqués

Cause : un JSON profondément imbriqué peut produire des clés de chemin plus longues que la limite de longueur des noms de colonnes des bases de données en aval (comme SQL Server ou PostgreSQL). Solution : définissez une profondeur maximale d'expansion dans le panneau d'options ; tout ce qui est plus profond est conservé en bloc. Vous pouvez aussi restructurer les données imbriquées ou renommer les clés profondes avant traitement.

Le navigateur se fige ou plante sur les gros fichiers

Cause : un JSON très volumineux (plusieurs dizaines de Mo et au-delà) consomme beaucoup de mémoire du navigateur et peut rendre la page inerte. Solution : découpez le fichier en morceaux plus petits, ou basculez sur un outil en ligne de commande (jq, flatten-json, script Python). Cet outil en ligne convient surtout aux réponses d'API, fichiers de configuration et entrées de journaux de taille courante.