Convertissez des clés à points en JSON imbriqué
Reconstruisez un enregistrement imbriqué à partir de noms plats à points : user.contact.email revient dans contact, lui-même dans user, tandis que active et le score de 42 restent au premier niveau. Dans l'exemple, 5 entrées plates sont traitées. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Cet outil déterministe développe chaque clé séparée par des points, conserve les chaînes, nombres, booléens, valeurs nulles, tableaux et objets, puis signale les chemins ambigus au lieu d’écraser discrètement des données. Il convient aux variables d’environnement, formulaires, configurations, outils analytiques et requêtes de base de données qui produisent des enregistrements plats à restaurer avant validation ou traitement.
Transformez les chemins à points en document imbriqué
Chaque nom de propriété devient un chemin dont les segments sont séparés par des points. Ainsi, account.profile.name place name dans profile, lui-même contenu dans account. Une clé sans point reste au niveau supérieur.
Aucune valeur n’est convertie : un nombre reste numérique, false demeure booléen, null reste nul et les tableaux conservent leur ordre. La réponse contient le document reconstitué sous json et le compteur keys des propriétés traitées. Les segments d’apparence numérique sont des clés d’objet ordinaires, jamais des indices de tableau : aucune forme de collection n’est donc devinée.
Le traitement est déterministe, sans réseau, et indépendant de la langue, de l’heure ou d’effets liés à l’ordre d’insertion.
Repérez les chemins incompatibles avant toute perte
La reconstruction devient risquée lorsqu’une clé définit un chemin comme valeur finale alors qu’une autre exige que ce même chemin soit un objet. La capacité la refuse avec une erreur d’entrée invalide au lieu de retenir arbitrairement la dernière propriété parcourue. Les collisions au sein d’objets explicites sont également refusées.
Un objet fourni peut être prolongé par des descendants à points tant qu’aucun membre existant ne s’y oppose : settings peut donc être un objet complété par settings.theme. Les clés vides, points initiaux ou finaux et doubles points créent des segments sans nom et sont rejetés. Les noms __proto__, prototype et constructor sont interdits à tous les niveaux, y compris dans les objets transmis.
Ces contrôles rendent les erreurs visibles et garantissent une origine non ambiguë pour chaque emplacement produit.
Intégrez le résultat aux migrations et aux traitements
Les clés plates apparaissent souvent aux frontières des systèmes. Une erreur de validation désignera alors l’enregistrement d’origine au lieu de laisser circuler une structure incomplète. Pour un lot, appelez la capacité une fois par enregistrement plat : l’unité facturée est un élément et chaque réponse décrit un document.
Les points présents dans une valeur textuelle restent sans effet.
Questions fréquentes
Quel est le tarif ?
Vous pouvez aussi effectuer la transformation dans votre navigateur.
Les segments numériques deviennent-ils des tableaux ?
Non. Chaque segment reste une clé d’objet afin de ne rien supposer sur un indice ou un identifiant.
Les types des valeurs sont-ils conservés ?
Oui. Chaînes, nombres finis, booléens, null, tableaux et objets sont copiés sans conversion.
Une clé peut-elle comporter un segment vide ?
Non. Les clés vides, doubles points et points initiaux ou finaux sont rejetés comme chemins ambigus.
Que se passe-t-il si deux noms entrent en conflit, comme user et user.name ?
L'entrée est refusée avec une erreur claire au lieu de garder le nom arrivé en dernier. Un même emplacement ne peut pas être à la fois une valeur finale et un groupe : chaque position d'un résultat réussi a donc une seule origine.
Outils associés
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/unflatten-to-json \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"flat":{"user.name":"Ada","user.contact.email":"ada@example.com","active":true}}'const res = await fetch("https://api.kit.forhosting.com/data/unflatten-to-json", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"flat": {
"user.name": "Ada",
"user.contact.email": "ada@example.com",
"active": true
}
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/unflatten-to-json",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"flat": {
"user.name": "Ada",
"user.contact.email": "ada@example.com",
"active": true
}
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/unflatten-to-json", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"flat":{"user.name":"Ada","user.contact.email":"ada@example.com","active":true}}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"flat":{"user.name":"Ada","user.contact.email":"ada@example.com","active":true}}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/unflatten-to-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
{
"flat": {
"user.name": "Ada",
"user.contact.email": "ada@example.com",
"active": true
}
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.unflatten_to_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. |
Notes techniques
Transformez un objet JSON plat tel que {"account.name":"Ada"} en la structure imbriquée réellement attendue par votre application.
Convertissez les chemins à points en document JSON ordinaire
Fournissez un objet JSON dans le champ flat. Ce choix stabilise les configurations, alias de base de données et soumissions de formulaires. Utilisez des valeurs JSON valides et mettez chaque propriété entre guillemets.
Repérez les chemins incompatibles avant toute perte
Une entrée contenant user sous forme de chaîne et user.name comme autre valeur ne peut exprimer ces deux faits dans une structure JSON unique.
Intégrez le résultat aux migrations et aux traitements
Les requêtes SQL émettent des alias comme customer.address.city, les plateformes de journaux aplatissent les événements pour les indexer, les formulaires HTML regroupent leurs contrôles avec des noms à points et les systèmes de déploiement exposent les réglages sous forme de variables séparées. Placez cette conversion juste après la lecture du format source et avant l’application d’un schéma JSON imbriqué. Le navigateur facilite l’inspection ponctuelle, tandis que l’API est proposée dès $0.002 pour l’automatisation. Les valeurs étant copiées sans analyse des chaînes ni inférence de type, analysez auparavant toute chaîne contenant volontairement du JSON.
Cas d'intégration
Rétablir les alias de requête
Transformez customer.name et customer.address.city en objet customer imbriqué attendu par une API.
Préparer une configuration à valider
Reconstituez les réglages imbriqués avant d’appliquer un schéma JSON ou des valeurs par défaut.
Normaliser formulaires et événements
Convertissez les noms à points provenant de formulaires, journaux ou exports analytiques en JSON ordinaire.
Questions techniques
Que se passe-t-il si une clé préfixe une autre clé ?
Si le préfixe contient une valeur qui n’est pas un objet, la requête échoue avec invalid_input, car les deux chemins sont incompatibles.