Aplanar / Desaplanar JSON

Aplana objetos JSON anidados en claves con notación de punto (por ejemplo, user.address.city) y desaplanarlos de vuelta. Separador configurable y manejo de matrices.

Flattened Output

12 keys
{
  "user.id": 42,
  "user.name": "Alice",
  "user.roles.0": "admin",
  "user.roles.1": "editor",
  "user.address.city": "Berlin",
  "user.address.country": "Germany",
  "user.address.zip": "10115",
  "user.preferences.theme": "dark",
  "user.preferences.notifications.email": true,
  "user.preferences.notifications.sms": false,
  "meta.version": "1.0",
  "meta.created": "2024-01-15"
}

Cómo usar Aplanar / Desaplanar JSON

  1. 1Pega un objeto JSON anidado en la entrada.
  2. 2Elige Aplanar para convertir a claves de notación de punto, o Desaplanar para convertir de vuelta.
  3. 3Configura el carácter separador y copia el resultado.
ZenovayAnalytics

Ve quién está en tu sitio ahora mismo.

  • Seguimiento de visitantes en tiempo real
  • Privacidad primero, sin aviso de cookies
  • Configurado en dos minutos
Descubre Zenovay

Preguntas frecuentes

¿Qué es el aplanamiento de JSON y cuándo es útil?
El aplanamiento de JSON convierte objetos anidados en un objeto de un solo nivel donde las claves anidadas se unen con un separador (generalmente punto). Ejemplo: {"user": {"name": "Alice", "address": {"city": "Berlin"}}} → {"user.name": "Alice", "user.address.city": "Berlin"}. Casos de uso: aplanar para almacenamiento en columnas de base de datos (migración de NoSQL a SQL), simplificar respuestas de API profundamente anidadas, alimentar pipelines de aprendizaje automático que esperan datos tabulares, indexación de documentos en Elasticsearch y envío de eventos de análisis con propiedades planas.
¿Cómo funciona el aplanamiento de arrays?
Los arrays se aplanan usando su índice como parte de la clave. Ejemplo: {"tags": ["js", "ts"]} → {"tags.0": "js", "tags.1": "ts"} con separador de punto, o {"tags[0]": "js", "tags[1]": "ts"} con notación de corchetes. Arrays anidados: {"matrix": [[1,2],[3,4]]} → {"matrix.0.0": 1, "matrix.0.1": 2, "matrix.1.0": 3, "matrix.1.1": 4}. Reconstruir arrays al desaplanar requiere saber qué claves son índices numéricos. Algunas herramientas conservan la estructura del array al desaplanar; otras la convierten en objetos.
¿Qué separadores se usan comúnmente para claves aplanadas?
Punto (.): el más común, intuitivo, entra en conflicto con claves que contienen puntos. Guion bajo (_): evita conflictos con puntos, usado en algunas convenciones de nomenclatura de columnas de bases de datos. Doble guion bajo (__): evita conflictos con guiones bajos simples, usado en variables de entorno de Django y valores de Helm chart. Barra inclinada (/): usada en JSON Pointer (RFC 6901) — "/user/address/city". Dos puntos (:): usado en algunos sistemas de configuración. Mejor práctica: elija un separador que no aparezca en sus nombres de clave existentes. Evite los puntos si las claves pueden contener nombres de paquetes o nombres de dominio.
¿Qué es JSON Pointer (RFC 6901)?
JSON Pointer es un estándar IETF (RFC 6901) para referenciar un valor específico dentro de un documento JSON. Formato: /clave/subclave/índice. Documento raíz: "". Primer elemento del array: "/0". Valor anidado: "/user/address/city". Caracteres especiales: "~0" representa "~", "~1" representa "/". Usado en: JSON Patch (RFC 6902) para actualizaciones parciales, $ref de JSON Schema, referencias de rutas de OpenAPI. Ejemplo: PATCH con {"op": "replace", "path": "/user/address/city", "value": "London"} cambia un valor anidado sin reemplazar todo el documento.
¿Cómo aplano JSON en JavaScript sin una biblioteca?
function flatten(obj, prefix = "", sep = ".") { return Object.entries(obj).reduce((acc, [key, val]) => { const newKey = prefix ? prefix + sep + key : key; if (val && typeof val === "object" && !Array.isArray(val)) { Object.assign(acc, flatten(val, newKey, sep)); } else if (Array.isArray(val)) { val.forEach((item, i) => { if (item && typeof item === "object") { Object.assign(acc, flatten(item, newKey + sep + i, sep)); } else { acc[newKey + sep + i] = item; } }); } else { acc[newKey] = val; } return acc; }, {}); }. Para la inversa (desaplanar), divida cada clave por el separador y reconstruya la estructura anidada.