JSON Flatten
Herramienta online para aplanar y desaplanar JSON. Convierte con un solo clic JSON anidado en pares clave-valor de un solo nivel separados por puntos. Soporta separadores personalizados, expansión de índices de matrices y restauración inversa; todo se procesa localmente para mayor privacidad.
Relacionado
Casos de uso
- Consultas y agregaciones en MongoDB: convierte JSON anidado en estructuras planas con notación de puntos y utilízalas directamente en consultas find, sentencias update y pipelines de agregación, sin escribir rutas a mano
- Exportación a CSV/Excel: tras aplanar objetos anidados de varios niveles, usa las claves con notación de puntos como encabezados al importar en un DataFrame de Pandas o en Excel, con un registro por fila
- Indexación en Elasticsearch: los documentos planos se almacenan y consultan mejor en motores de búsqueda; expande los campos de matrices anidadas en pares clave-valor de un solo nivel
- Depuración de APIs: compara lado a lado las estructuras anidadas de solicitudes y respuestas; los nombres de campo aplanados son más intuitivos y facilitan detectar campos faltantes o errores de tipo
- Preprocesamiento de archivos de configuración: convierte configuraciones anidadas como package.json o settings.json en forma de variables de entorno, listas para inyectar en contenedores Docker o pipelines CI
- Registros y monitorización: aplana eventos de log profundamente anidados antes de cargarlos en un almacén de datos para poder agregarlos y visualizarlos por campo
Cómo Usar
- Pega el JSON que necesitas procesar en el cuadro de entrada de la izquierda, o haz clic en el botón de subir para elegir un archivo .json local. También puedes pulsar el botón de Muestra para cargar un ejemplo anidado predefinido
- Cambia entre los modos Aplanar y Desaplanar en la barra de herramientas y, en el panel de opciones inferior, define el separador, el manejo de matrices y la profundidad máxima de expansión
- La herramienta procesa en tiempo real de forma automática; el panel de la derecha muestra al instante el resultado junto con el conteo de claves y la profundidad máxima
- Pulsa Copiar para enviar el resultado al portapapeles o Descargar para guardarlo como archivo .json en tu dispositivo
Características
- Conversión bidireccional: soporta aplanar y desaplanar JSON, alternando entre estructura anidada y plana sin pérdida
- Separadores personalizados: el valor por defecto es el punto, pero puedes cambiar a guion bajo, barra, doble guion bajo o cualquier carácter para adaptarte a distintos sistemas
- Manejo configurable de matrices: expande las matrices en claves indexadas (p. ej. items.0, items.1) o las conserva como un único valor, cubriendo tanto flujos tabulares como de configuración
- Límite de profundidad máxima: limita la profundidad de expansión para evitar claves excesivamente largas en estructuras profundamente anidadas
- Estadísticas en tiempo real: tras el procesamiento, muestra al instante el número total de claves y la profundidad máxima para evaluar el tamaño de salida
- Procesamiento local con privacidad: todo el análisis y la conversión ocurren en el navegador; los datos JSON no se suben a ningún servidor, ideal para APIs sensibles y configuraciones de producción
- Carga de archivo y datos de muestra: sube un archivo .json o carga los datos de muestra integrados con un solo clic para verificar rápidamente la conversión
- Copiar y descargar: copia el resultado al portapapeles o descárgalo como archivo .json estándar con un solo clic para procesamientos posteriores
Ejemplos de Código
Aplanar JSON en JavaScript
javascriptfunction 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' }Aplanar JSON en Python
pythondef 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"}Aplanar JSON con jq desde la línea de comandos
bash# Convertir JSON anidado en estructura plana con notación de puntos
jq '[paths(scalars) as $p | {"key": $p | join("."), "value": getpath($p)}] | from_entries' data.json
# Reconstruir JSON anidado a partir de uno plano
# Usa jq 1.7+ con un filtro de terceros, o directamente el modo Desaplanar de esta herramienta.Preguntas Frecuentes
¿Qué es aplanar JSON y cuándo se necesita?
Aplanar JSON es el proceso de convertir un objeto o matriz con varios niveles de anidamiento en una estructura de pares clave-valor de un solo nivel, donde las claves anidadas se unen mediante un separador (por defecto, el punto). Por ejemplo, {"user":{"name":"Alice"}} se convierte en {"user.name":"Alice"}. Lo necesitas siempre que quieras exportar JSON anidado a CSV, ejecutar consultas MongoDB con notación de puntos, crear índices en Elasticsearch, convertir configuraciones en variables de entorno o alimentar un sistema posterior que solo acepte claves planas.
¿Se puede restaurar el JSON aplanado a su estructura anidada?
Sí. Esta herramienta incluye un modo Desaplanar. Mientras el separador coincida, restaurará sin pérdida los pares clave-valor planos a los objetos y matrices anidados originales, y detectará automáticamente índices enteros consecutivos (0, 1, 2…) para reconstruirlos como una matriz, sin necesidad de marcar nada adicional.
¿Se puede personalizar el separador? ¿Cómo se tratan las matrices?
Sí. El separador puede ser un punto, guion bajo, barra, doble guion bajo o cualquier carácter, hasta 3 caracteres. Hay dos modos para las matrices: por defecto cada elemento se expande a una clave numérica como items.0 o items.1; también puedes marcar la opción para mantener toda la matriz como un único valor. Además, puedes fijar una profundidad máxima de expansión (0 significa ilimitada), y cualquier anidamiento más profundo se conservará como un todo para evitar claves demasiado largas.
¿Procesar JSON en línea filtra mis datos?
No. Todo el análisis, aplanado y desaplanado ocurre localmente en tu navegador. Los datos JSON nunca se envían a ningún servidor. Las APIs en producción, la configuración activa y los datos personales no salen de tu dispositivo, así que puedes usarlo con tranquilidad.
¿Cómo se usa JSON Flatten con MongoDB?
MongoDB utiliza por defecto la notación de puntos para acceder a campos anidados. Por ejemplo, para buscar documentos donde user.contact.email sea igual a alice@example.com, el comando es { "user.contact.email": "alice@example.com" }. Después de convertir tu JSON anidado en una estructura plana con notación de puntos con esta herramienta, esas claves se pueden pegar directamente en consultas find, sentencias update o pipelines de agregación, evitando escribir las rutas a mano.
¿Cómo exporto el JSON aplanado a CSV o Excel?
La salida aplanada ya es una estructura de pares clave-valor de un solo nivel donde todos los campos de un registro están en el mismo nivel. Puedes copiarla directamente en nuestra herramienta JSON a CSV, o importarla en Excel/Pandas usando las claves con notación de puntos como encabezados de columna. Para matrices de objetos, define una profundidad máxima o mantén la matriz como un único valor para evitar que un mismo registro se divida en varias filas.
¿Cuándo conviene usar guion bajo o barra como separador?
El punto (user.address.city) es la opción más universal y se adapta bien a objetos JS y consultas MongoDB. El guion bajo (user_address_city) encaja con nombres de columnas SQL, nombres de variables en Python y variables de entorno. La barra (user/address/city) se asemeja a una ruta de archivo y es habitual en parámetros de ruta de APIs REST. El doble guion bajo (user__address__city) es útil en configuraciones tipo Django que ya hacen un uso intensivo del guion bajo.
¿Qué pasa si mis nombres de clave contienen puntos o guiones bajos?
Se producirá un conflicto. Por ejemplo, una clave llamada user.name aplanada con un punto como separador se convierte en user.name.name, y al desaplanarla se separará como user → name → name, en dos niveles. Si tus claves contienen el carácter separador, cambia a un separador que no aparezca en tus claves (barra, doble guion bajo o un carácter personalizado) o escapa/renombra las claves originales antes del procesamiento.
¿Cómo se expanden los objetos dentro de una matriz?
Por defecto, se expanden con índices numéricos. Por ejemplo, dos objetos dentro de una matriz orders se convierten en orders.0.id, orders.0.total, orders.1.id, orders.1.total. Si tu sistema posterior espera una tabla con una fila por registro, esta estructura se corresponde directamente con varias filas del CSV. Al desaplanar, los índices enteros consecutivos (0, 1, 2…) se restauran automáticamente como una matriz sin activar ninguna opción adicional.
¿Se bloquea al procesar JSON muy grandes?
Esta herramienta se ejecuta en tu navegador. Las respuestas típicas de APIs (decenas a centenas de KB) terminan en segundos. Para archivos muy grandes (varios MB en adelante), se recomienda usar una herramienta de línea de comandos local como jq para evitar la presión de memoria del navegador. Si necesitas procesarlos en línea, primero comprime o recorta los campos y, o bien, divide el JSON en lotes y los vas aplanando uno a uno.
¿Para qué sirve el límite de profundidad máxima?
El límite de profundidad máxima restringe la expansión al nivel que indiques; cualquier anidamiento más profundo se conserva como un único valor. Tiene dos usos principales: primero, evitar que las configuraciones muy profundas generen claves excesivamente largas; segundo, respetar el límite de longitud de nombres de columna en bases de datos destino (algunas columnas de SQL Server están limitadas a 128 caracteres). El valor por defecto 0 significa sin límite; ajústalo según tu caso.
¿Puedo guardar o reutilizar el resultado convertido?
Sí. Tras el procesamiento puedes copiar el resultado al portapapeles con un solo clic o descargarlo directamente como archivo .json estándar. Todo se realiza localmente, sin necesidad de registrarte y sin caché en el servidor.
Solución de problemas
Aparece el mensaje "La entrada no es un JSON válido"
Causa: el texto JSON contiene un error de sintaxis, como comillas faltantes, comas sobrantes, corchetes sin cerrar o booleanos estilo Python (True/False). Solución: valida antes el JSON con el formateador/validador incluido. Recuerda que los booleanos y null deben ir en minúsculas y sin comillas, y las claves deben ir entre comillas dobles.
Tras aplanar, los nombres de clave entran en conflicto y el desaplanado rompe los niveles
Causa: una clave original ya contiene el separador elegido (por ejemplo, user.name aplanado con punto). Solución: cambia a un separador que no aparezca en tus claves (barra, doble guion bajo o un carácter personalizado) o escapa/renombra las claves originales antes del procesamiento.
Mi matriz se divide en varias filas al exportar a CSV
Causa: por defecto, los elementos de la matriz se expanden con índices numéricos, así que cada elemento genera su propio conjunto de pares clave-valor que, al cruzarse con el resto de campos, produce varios registros. Solución: si quieres una fila por objeto, activa "Mantener la matriz como un único valor" o desactiva la expansión de campos de matriz en la herramienta CSV. Si buscas una fila por elemento de matriz, este es el comportamiento esperado.
El resultado de Desaplanar no es una matriz
Causa: solo las claves con índices enteros consecutivos (0, 1, 2…) se restauran como matrices. Claves como orders.first u orders.second se interpretan como claves de objeto. Solución: evita renombrar los índices numéricos al aplanar, o reescribe manualmente las claves del campo de matriz al formato numérico puro (orders.0, orders.1) antes de desaplanar.
Los nombres de columna de la base de datos se truncan
Causa: al aplanar JSON profundamente anidado, las claves-ruta pueden superar el límite de longitud de nombres de columna de bases de datos destino (como SQL Server o PostgreSQL). Solución: define una profundidad máxima de expansión en el panel de opciones; todo lo que esté más profundo se conservará como un único valor. También puedes reestructurar los datos anidados o renombrar las claves profundas antes del procesamiento.
El navegador se bloquea o se cierra al procesar archivos grandes
Causa: JSON muy grandes (decenas de MB en adelante) consumen mucha memoria del navegador y pueden dejar la página sin respuesta. Solución: divide el archivo en fragmentos más pequeños, o cambia a una herramienta de línea de comandos (jq, flatten-json, script de Python). Esta herramienta online es ideal para respuestas de API, archivos de configuración y entradas de registro de tamaño habitual.
- Compresión JSON
- CSV a JSON
- JSON a CSV
- JSON Diff
- JSON Escape / Unescape
- JSON Flatten
- Formateo JSON
- Generador de JSON
- Consulta JSONPath
- Fusionar JSON
- Reparar JSON
- Validador JSON Schema
- Ordenar JSON
- JSON Stringify
- JSON a HTML
- JSON a Java
- JSON to Markdown
- JSON a SQL
- JSON a TOML
- JSON a TypeScript
- XML a JSON
- JSON a XML
- YAML a JSON
- JSON a YAML
- JSON a Python
- JSON a Go
- JSON a Rust
- JSON a Swift
- JSON a C#
- JSON a C++
- JSON a PHP