Todos los artículos

JSON Flatten: convertir una estructura anidada en una lista plana

Los objetos anidados son cómodos para modelar estructura, pero incómodos justo donde hace falta una lista plana de pares clave-valor: hojas de cálculo, líneas de registro o un archivo de traducción. Aplanar (flatten) resuelve exactamente ese desajuste.

Cómo funciona

Cada campo anidado se convierte en una fila, donde la clave es la ruta completa hasta el valor (con puntos o índices entre corchetes) y el valor es el propio valor. {"usuario": {"direccion": {"ciudad": "Madrid"}}} se convierte en el par usuario.direccion.ciudad → "Madrid". Los elementos de un array reciben un índice en la ruta, como items[0].nombre.

Dónde aparece esto: archivos de traducción

Las claves planas con notación de puntos son el formato habitual en archivos de localización de librerías como i18next o vue-i18n — ajustes.perfil.titulo en vez de un árbol JSON anidado. Las plataformas de traducción y los flujos basados en hojas de cálculo casi siempre esperan esa forma plana, así que aplanar un archivo de idioma anidado suele ser el primer paso antes de enviarlo a traducir.

Para qué sirve en la práctica

  • Importar datos anidados de una API a una hoja de cálculo o una tabla plana de base de datos.
  • Comparar línea por línea dos objetos complejos de forma legible.
  • Encontrar un valor concreto en un JSON muy anidado viendo su ruta completa de un vistazo.

La operación inversa: unflatten

Reconstruir la estructura anidada a partir de la lista plana implica separar cada clave en sus segmentos de ruta (por puntos e índices entre corchetes) y construir objetos y arrays anidados a medida que se avanza. La ambigüedad aparece cuando una ruta puede significar dos cosas: si los datos tienen a la vez una clave literal "a.b" y una ruta anidada a.b, unflatten no puede adivinar cuál se quiso decir y señala un conflicto en vez de sobrescribir en silencio.

Probar la herramienta