Aplanar JSON anidado a tabla con claves de notación de puntos
Convierta un objeto o array JSON anidado en una secuencia sencilla de filas de clave y valor sin escribir un script de recorrido específico.
Ejecutar — gratis
Cada propiedad anidada recibe una ruta con notación de puntos y las posiciones de los arrays se transforman en segmentos numéricos, por lo que un identificador de pedido puede localizarse siempre como orders.0.id. El resultado sirve para hojas de cálculo, tablas de preparación de bases de datos, registros, herramientas de mapeo y cualquier flujo que necesite rutas predecibles en lugar de estructuras anidadas. El proceso es determinista, conserva los tipos JSON y rechaza con un error claro el JSON mal formado o una raíz escalar.
Convierta estructuras anidadas en rutas predecibles
El JSON anidado resulta ideal para las API porque mantiene juntos los valores relacionados, pero muchas herramientas de informes e importación esperan una secuencia plana de campos. Esta capacidad recorre cada propiedad de objeto y cada elemento de array, y une todos los segmentos con un punto. Un valor guardado dentro de un objeto customer y una propiedad name pasa a ser customer.name. El primer elemento de un array orders se identifica mediante orders.0, de modo que su identificador se convierte en orders.0.id. Cada hoja se devuelve como una fila con clave y valor, lo que facilita mostrar, filtrar o transformar la salida en columnas. El recorrido respeta el orden presente en el JSON analizado y ofrece resultados estables para la misma entrada. Las cadenas siguen siendo cadenas, los números siguen siendo números, los booleanos siguen siendo booleanos y null se conserva. Los objetos y arrays vacíos se emiten como valores en vez de desaparecer, por lo que la salida plana registra que esas rutas existían en el documento original.
Prepare la entrada e interprete la salida
Proporcione el documento JSON completo como texto en el campo json. Su raíz debe ser un objeto o un array. Este requisito evita una clave vacía ambigua para cadenas, números, booleanos o null independientes. Los nombres de las propiedades del objeto se usan exactamente como se proporcionan, mientras que los índices de array se escriben como segmentos numéricos desde cero. La respuesta contiene pairs, un array cuyas entradas incluyen los campos key y value y que, por tanto, puede tratarse directamente como filas de una tabla. Si la propia raíz es un objeto o array vacío, la clave devuelta es una cadena vacía y el valor conserva ese contenedor. Tenga en cuenta que los puntos existentes en un nombre de propiedad original no se escapan. Por ejemplo, una propiedad literal llamada user.name genera la misma ruta visible que un objeto user anidado con name. Si sus datos contienen propiedades con puntos y necesita rutas reversibles, cambie esos nombres antes de aplanar o conserve el JSON original junto al resultado plano.
Utilice los pares planos en flujos de datos
Los pares aplanados funcionan bien como representación intermedia. Una automatización de hoja de cálculo puede colocar las claves en una columna y los valores en otra; una tarea de ingesta puede convertir rutas seleccionadas en columnas de una fila ancha; y una herramienta de comparación puede indexar los pares por clave antes de revisar dos documentos. Los segmentos numéricos de arrays también distinguen los registros repetidos, en lugar de mezclar valores de elementos diferentes. Como la operación no realiza solicitudes de red ni utiliza valores aleatorios, marcas de tiempo o inferencia de modelos, un texto JSON idéntico produce siempre la misma salida. El JSON no válido falla sin devolver un resultado parcial, y el JSON escalar válido falla porque no cumple el contrato de objeto o array. El precio de la API es de $0.002 por elemento, mientras que el ejecutor del navegador puede usar localmente la misma lógica determinista. Para documentos muy grandes, valore un flujo de transmisión o específico del esquema, ya que el aplanado crea una fila por cada hoja primitiva o contenedor vacío.
Qué puede hacer con ella
Prepare una respuesta de API para una tabla
Convierta los campos anidados de una respuesta en rutas explícitas que pueda seleccionar, mapear o mostrar como filas de clave y valor.
Cree mapeos de importación
Revise las rutas con notación de puntos antes de mapear valores JSON seleccionados a columnas de una hoja de cálculo o base de datos.
Compare registros estructurados
Aplane dos objetos en secuencias estables de ruta y valor para localizar las diferencias mediante sus rutas completas.
Preguntas frecuentes
¿Cuánto cuesta?
Cada elemento de la API cuesta $0.002. El ejecutor del navegador puede procesar la entrada localmente de forma gratuita.
¿Cómo se representan los arrays?
Las posiciones se convierten en segmentos numéricos desde cero, como orders.0.id y orders.1.id.
¿Se conservan los tipos de valores JSON?
Sí. Las cadenas, los números, los booleanos, null y los contenedores vacíos mantienen su tipo JSON en el campo value.
¿Qué ocurre con los objetos y arrays vacíos?
Se devuelven como valores hoja para no perder sus rutas. Un contenedor raíz vacío utiliza una clave vacía.
¿Puedo enviar una cadena o un número JSON como raíz?
No. La raíz analizada debe ser un objeto o array; las raíces escalares devuelven un error de entrada no válida.
¿Se escapan los puntos de los nombres de propiedades originales?
No. Los nombres se conservan exactamente; cambie antes las propiedades con puntos si necesita rutas reversibles sin ambigüedad.
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/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)Ejemplo de solicitud
{
"json": "{\"customer\":{\"name\":\"Ada\",\"address\":{\"city\":\"London\"}},\"orders\":[{\"id\":7,\"paid\":true}]}"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.flatten_nested_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. |