0Pricing
Lua Academy · Lección

Gestionar datos anidados

Trabaje con estructuras complejas

Gestionar datos anidados es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

Los datos anidados están por todas partes

El JSON del mundo real rara vez es plano. Los objetos contienen objetos y los arrays contienen objetos, a menudo en varios niveles de profundidad.

En Lua, esto significa tener tablas dentro de tablas. La buena noticia es que decode y encode gestionan el anidamiento automáticamente.

Un objeto dentro de otro objeto

Cuando un valor JSON es a su vez un objeto, se decodifica como una tabla de Lua anidada. Puede acceder a sus niveles mediante accesos encadenados a campos.

local json = require("dkjson")
local d = json.decode('{"user": {"name": "Eve", "age": 30}}')
print(d.user.name)
print(d.user.age)

Un array de objetos

Una estructura muy común es un array JSON de objetos, como una lista de registros. Se decodifica como una secuencia de tablas.

Utilice un bucle con ipairs y lea los campos de cada elemento.

local json = require("dkjson")
local d = json.decode('[{"id":1},{"id":2}]')
for _, item in ipairs(d) do
  print(item.id)
end

Acceso a datos profundamente anidados

Puede encadenar accesos hasta la profundidad de los datos. Cada nivel es simplemente otra búsqueda en una tabla.

Sin embargo, si falta cualquier nivel intermedio, la cadena produce el error 'attempt to index a nil value'.

local json = require("dkjson")
local d = json.decode('{"a":{"b":{"c": 42}}}')
print(d.a.b.c)

Acceso seguro a datos anidados

Para evitar errores por niveles inexistentes, compruebe cada paso o utilice la evaluación de cortocircuito de and.

La cadena de and se detiene en el primer nil y devuelve nil en lugar de producir un error.

local json = require("dkjson")
local d = json.decode('{"a":{}}')
local c = d.a and d.a.b and d.a.b.c
print(c)  -- nil, no crash

Iteración de arrays anidados

Los arrays pueden contener objetos que, a su vez, contienen más arrays. Anide los bucles para que coincidan con la estructura.

local json = require("dkjson")
local d = json.decode('[{"tags":["a","b"]}]')
for _, rec in ipairs(d) do
  for _, tag in ipairs(rec.tags) do
    print(tag)
  end
end

Construcción de tablas anidadas

Para codificar JSON anidado, simplemente anide tablas de Lua. El codificador recorre toda la estructura de forma recursiva.

local json = require("dkjson")
local t = {
  user = { name = "Jo", roles = { "admin", "editor" } }
}
print(json.encode(t, { indent = true }))

Modificación de valores anidados

Puede leer, cambiar y añadir campos en cualquier nivel antes de volver a codificar los datos. Esta es la esencia de la transformación de datos.

local json = require("dkjson")
local d = json.decode('{"cfg":{"volume":5}}')
d.cfg.volume = 8
d.cfg.muted = false
print(json.encode(d))

Combinación de arrays y objetos

JSON combina libremente arrays y objetos en distintos niveles. Lua refleja esto mediante tablas de secuencias y tablas con claves anidadas entre sí.

Asegúrese de que cada tabla tenga siempre una sola estructura u otra.

local json = require("dkjson")
local t = {
  team = "red",
  members = { { id = 1 }, { id = 2 } }
}
print(json.encode(t))

Recorrido de estructuras desconocidas

Cuando no conoce la estructura de antemano, utilice type() para inspeccionar cada valor y aplicar recursividad a las tablas.

Esto le permite escribir procesadores genéricos para JSON arbitrario.

local function walk(v)
  if type(v) == "table" then
    for k, sub in pairs(v) do walk(sub) end
  else
    print(v)
  end
end

Cuidado con null al anidar

Un null en lo profundo de los datos anidados también se decodifica como json.null en dkjson. Téngalo en cuenta al recorrer las estructuras para no confundirlo con una tabla o un valor real.

local json = require("dkjson")
local d = json.decode('{"a":{"b": null}}')
if d.a.b == json.null then
  print("b is null")
end

Comprobación rápida

Compruebe cómo maneja el JSON anidado en Lua.

Resumen

El JSON anidado se representa mediante tablas dentro de tablas; decode y encode gestionan la recursividad por usted.

Profundice mediante accesos encadenados, pero protéjase frente a niveles inexistentes utilizando cadenas con and. Construya la salida anidada anidando tablas de Lua y recuerde los valores null y la diferencia entre arrays y objetos en cada nivel.

Preguntas frecuentes

¿La lección «Gestionar datos anidados» es gratis?

Sí — el texto completo de «Gestionar datos anidados» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Gestionar datos anidados»?

Trabaje con estructuras complejas Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Gestionar datos anidados»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Por qué JSON
  2. Decodificar JSON en tablas
  3. Codificar tablas en JSON
  4. Gestionar datos anidados
← Volver a Lua Academy