Aplatir un JSON imbriqué en tableau avec des clés à points
Transformez un objet ou tableau JSON imbriqué en une suite simple de lignes clé/valeur, sans écrire de script de parcours ponctuel.
Lancer gratuitement
Chaque propriété imbriquée reçoit un chemin en notation pointée et les positions des tableaux deviennent des segments numériques : un identifiant de commande est ainsi toujours accessible sous orders.0.id. Le résultat convient aux feuilles de calcul, tables de préparation de bases de données, journaux, outils de mappage et à tout flux exigeant des chemins prévisibles plutôt que des structures imbriquées. Le traitement est déterministe, conserve les types JSON et rejette clairement le JSON mal formé ou une racine scalaire.
Convertissez une structure imbriquée en chemins prévisibles
Le JSON imbriqué convient parfaitement aux API, car il regroupe les valeurs associées, mais de nombreux outils de rapport et d’importation attendent une suite de champs à plat. Cette capacité parcourt chaque propriété d’objet et chaque élément de tableau, puis relie les segments par un point. Une valeur placée dans un objet customer, sous une propriété name, devient customer.name. Le premier élément d’un tableau orders est désigné par orders.0 ; son identifiant devient donc orders.0.id. Chaque feuille est renvoyée sous forme de ligne comprenant une clé et une valeur, ce qui facilite l’affichage, le filtrage ou la conversion en colonnes. Le parcours respecte l’ordre du JSON analysé et donne un résultat stable pour une même entrée. Les chaînes, nombres et booléens gardent leur type, tout comme null. Les objets et tableaux vides sont émis comme valeurs au lieu de disparaître silencieusement : la sortie aplatie indique ainsi que ces chemins existaient bien dans le document source.
Préparez l’entrée et interprétez la sortie
Fournissez le document JSON complet sous forme de texte dans le champ json. Sa racine doit être un objet ou un tableau. Cette exigence évite une clé vide ambiguë pour une chaîne, un nombre, un booléen ou null isolé. Les noms de propriétés sont repris exactement, tandis que les indices de tableau deviennent des segments numériques commençant à zéro. La réponse contient pairs, un tableau dont chaque entrée possède les champs key et value, directement exploitable comme lignes tabulaires. Si la racine est elle-même un objet ou tableau vide, la clé renvoyée est une chaîne vide et la valeur conserve ce conteneur. Sachez que les points déjà présents dans le nom d’une propriété source ne sont pas échappés. Ainsi, une propriété littérale user.name produit le même chemin visible qu’un objet user imbriqué contenant name. Si vos données emploient de tels noms et que les chemins doivent être réversibles, renommez ces propriétés avant l’aplatissement ou conservez le JSON original avec le résultat.
Exploitez les paires aplaties dans vos flux de données
Les paires aplaties constituent une représentation intermédiaire pratique. Une automatisation de feuille de calcul peut placer les clés dans une colonne et les valeurs dans une autre ; une tâche d’ingestion peut faire pivoter certains chemins en colonnes d’une ligne large ; un comparateur peut indexer les paires par clé avant d’examiner deux documents. Les segments numériques des tableaux distinguent aussi clairement les enregistrements répétés au lieu de mélanger leurs valeurs. Comme l’opération n’effectue aucune requête réseau et n’utilise ni valeur aléatoire, ni horodatage, ni inférence de modèle, un texte JSON identique produit toujours la même sortie. Un JSON non valide échoue sans résultat partiel ; un JSON scalaire valide échoue aussi, car il ne respecte pas le contrat objet-ou-tableau. Le tarif de l’API est de $0.002 par élément, tandis que l’exécuteur du navigateur applique gratuitement la même logique déterministe en local. Pour un document immense, envisagez plutôt un pipeline diffusé ou adapté au schéma, car l’aplatissement crée une ligne pour chaque feuille primitive ou conteneur vide.
Cas d’usage
Préparer une réponse d’API pour un tableau
Convertissez les champs imbriqués en chemins explicites que vous pouvez sélectionner, mapper ou afficher sous forme de lignes clé/valeur.
Créer des mappages d’importation
Examinez les chemins pointés avant d’associer des valeurs JSON choisies aux colonnes d’une feuille de calcul ou d’une base.
Comparer des enregistrements structurés
Aplatissez deux objets en suites stables de chemins et valeurs afin de repérer les écarts grâce à leur chemin complet.
Questions fréquentes
Quel est le tarif ?
Chaque élément traité par l’API coûte $0.002. L’exécuteur du navigateur peut traiter l’entrée localement sans frais.
Comment les tableaux sont-ils représentés ?
Leurs positions deviennent des segments numériques commençant à zéro, comme orders.0.id et orders.1.id.
Les types de valeurs JSON sont-ils conservés ?
Oui. Chaînes, nombres, booléens, null et conteneurs vides gardent leur type JSON dans le champ value.
Que deviennent les objets et tableaux vides ?
Ils sont renvoyés comme feuilles afin de conserver leur chemin. Un conteneur racine vide utilise une clé vide.
Puis-je envoyer une chaîne ou un nombre JSON comme racine ?
Non. La racine analysée doit être un objet ou un tableau ; une racine scalaire produit une erreur d’entrée non valide.
Les points des noms de propriétés source sont-ils échappés ?
Non. Les noms restent inchangés ; renommez d’abord les propriétés à points si vous exigez des chemins réversibles sans ambiguïté.
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/data/flatten-nested-json \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"json":"{\"customer\":{\"name\":\"Ada\",\"address\":{\"city\":\"London\"}},\"orders\":[{\"id\":7,\"paid\":true}]}"}'const res = await fetch("https://api.kit.forhosting.com/data/flatten-nested-json", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"json": "{\"customer\":{\"name\":\"Ada\",\"address\":{\"city\":\"London\"}},\"orders\":[{\"id\":7,\"paid\":true}]}"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/flatten-nested-json",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"json": "{\"customer\":{\"name\":\"Ada\",\"address\":{\"city\":\"London\"}},\"orders\":[{\"id\":7,\"paid\":true}]}"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/flatten-nested-json", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"json":"{\\"customer\\":{\\"name\\":\\"Ada\\",\\"address\\":{\\"city\\":\\"London\\"}},\\"orders\\":[{\\"id\\":7,\\"paid\\":true}]}"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"json":"{\"customer\":{\"name\":\"Ada\",\"address\":{\"city\":\"London\"}},\"orders\":[{\"id\":7,\"paid\":true}]}"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/flatten-nested-json", 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
{
"json": "{\"customer\":{\"name\":\"Ada\",\"address\":{\"city\":\"London\"}},\"orders\":[{\"id\":7,\"paid\":true}]}"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.flatten_nested_json",
"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
max_mb | 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. |