Convierta claves con puntos en JSON anidado
Reconstruya un registro anidado a partir de nombres planos con puntos: user.contact.email vuelve dentro de contact, dentro de user, mientras active y la puntuación de 42 se quedan en el nivel superior. En el ejemplo se procesan 5 entradas planas. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Esta herramienta determinista expande cada clave separada por puntos, conserva cadenas, números, booleanos, valores nulos, matrices y objetos, y señala las rutas ambiguas en vez de sobrescribir datos sin avisar. Resulta útil cuando variables de entorno, formularios, configuraciones, sistemas analíticos o consultas de bases de datos producen registros planos que deben restaurarse antes de validarlos o procesarlos.
Convierta rutas con puntos en un documento anidado
Cada nombre de propiedad se interpreta como una ruta cuyos segmentos están separados por puntos. Por ejemplo, account.profile.name se convierte en la propiedad name dentro de profile, que a su vez pertenece a account. Una clave sin puntos permanece en el nivel superior.
Los valores no se convierten: un número sigue siendo número, false continúa como booleano, null conserva su valor y las matrices mantienen su orden y contenido. El resultado incluye el documento reconstruido en json y un contador keys que indica cuántas propiedades planas se procesaron. Los segmentos que parecen números se tratan como claves normales de objeto, no como índices de matriz, de modo que la transformación nunca adivina una estructura que la entrada no haya expresado.
El proceso es determinista, no usa la red y no depende de la configuración regional ni de la hora.
Detecte rutas incompatibles antes de perder datos
La reconstrucción resulta peligrosa cuando una clave declara que una ruta es un valor final y otra necesita que esa misma ruta sea un objeto. La capacidad rechaza esa entrada con un error de entrada no válida, en lugar de elegir la propiedad visitada en último lugar. También rechaza colisiones dentro de objetos explícitos.
Un objeto explícito puede ampliarse mediante descendientes con puntos si ninguna propiedad existente entra en conflicto; por ello, settings como objeto puede convivir con settings.theme como miembro nuevo. Se rechazan las claves vacías, los puntos iniciales o finales y los puntos dobles porque crean segmentos sin nombre. Asimismo, se bloquean __proto__, prototype y constructor en todos los niveles, incluso dentro de objetos suministrados, para evitar efectos relacionados con prototipos.
Estas comprobaciones hacen visibles los fallos y garantizan que cada lugar de una salida válida tenga un origen inequívoco.
Integre el resultado en migraciones y flujos de aplicaciones
Las claves planas aparecen con frecuencia en los límites entre sistemas. Así, un fallo de validación señala el registro de origen y no permite que una estructura incompleta avance por el flujo. Para trabajos por lotes, invoque la capacidad una vez por registro plano, ya que la unidad de facturación es un elemento y cada respuesta describe exactamente un documento reconstruido.
Los puntos dentro de los valores de texto son seguros; solo se interpretan los nombres de propiedad.
Preguntas frecuentes
¿Cuánto cuesta?
También puede ejecutar la transformación en su navegador desde esta página.
¿Los segmentos numéricos se convierten en matrices?
No. Cada segmento se conserva como clave de objeto para evitar suposiciones sobre índices o identificadores.
¿Se conservan los tipos de los valores?
Sí. Las cadenas, los números finitos, los booleanos, null, las matrices y los objetos se copian sin conversión.
¿Puede una clave contener un segmento vacío?
No. Se rechazan las claves vacías, los puntos dobles y los puntos al principio o al final por resultar ambiguos.
¿Qué pasa si dos nombres chocan, como user y user.name?
La entrada se rechaza con un error claro en lugar de quedarse con el nombre que llegó último. Un mismo lugar no puede ser a la vez un valor final y un grupo, así que en un resultado correcto cada posición tiene un único origen.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"flat": {
"user.name": "Ada",
"user.contact.email": "ada@example.com",
"active": true
}
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.unflatten_to_json",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Convierta un objeto JSON plano como {"account.name":"Ada"} en la estructura anidada que su aplicación necesita.
Convierta rutas con puntos en un documento JSON normal
Proporcione un objeto JSON en el campo flat. Así, la salida es estable para configuraciones, alias de bases de datos y formularios. Use valores JSON válidos y escriba entre comillas cada propiedad.
Detecte rutas incompatibles antes de perder datos
Una entrada que contiene user como cadena y user.name como valor adicional no puede representar ambos hechos en una única estructura JSON.
Integre el resultado en migraciones y flujos de aplicaciones
Las consultas SQL suelen emitir alias como customer.address.city; las plataformas de registros y análisis aplanan eventos anidados para indexarlos; los formularios HTML codifican controles agrupados mediante nombres con puntos; y los sistemas de despliegue representan configuraciones como variables individuales. Sitúe esta conversión justo después de leer el formato de origen y antes de aplicar un esquema JSON anidado. El ejecutor del navegador sirve para revisar un registro sin programar, mientras que la API comienza en $0.002 cuando necesite automatizarlo. Como los valores se copian sin analizar cadenas ni inferir tipos, analice antes las cadenas que contengan JSON intencionadamente.
Casos de integración
Restaure alias de consultas
Convierta columnas como customer.name y customer.address.city en el objeto customer anidado que espera una API.
Prepare configuraciones para validarlas
Reconstruya ajustes anidados desde claves planas antes de aplicar un esquema JSON o valores predeterminados.
Normalice formularios y eventos
Transforme nombres con puntos procedentes de formularios, registros o exportaciones analíticas en JSON normal.
Preguntas técnicas
¿Qué ocurre si una clave es prefijo de otra?
Si el prefijo contiene un valor que no es objeto, la solicitud falla con invalid_input porque ambas rutas no pueden coexistir.