0Pricing
Lua Academy · Lección

Decodificar JSON en tablas

Analice cadenas JSON

Decodificar JSON en tablas es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 2 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.

Conceptos básicos de la decodificación

La decodificación convierte una cadena JSON en un valor de Lua con el que puede trabajar. El punto de entrada es json.decode(text).

Si el JSON de nivel superior es un objeto, obtiene una tabla de Lua con claves de cadena; si es un array, obtiene una tabla con índices numéricos.

local json = require("dkjson")
local data = json.decode('{"id": 7}')
print(data.id)

Leer campos de objetos

Un objeto JSON decodificado se comporta como cualquier tabla de Lua. Acceda a sus valores mediante la notación de punto o de corchetes.

Las claves que no son identificadores válidos de Lua, como las que contienen espacios, requieren la sintaxis de corchetes.

local json = require("dkjson")
local u = json.decode('{"name": "Mia", "full name": "Mia Lee"}')
print(u.name)
print(u["full name"])

Decodificar arrays

Un array JSON se decodifica en una tabla secuencial de Lua indexada desde 1. Puede recorrerla con ipairs o con un bucle numérico.

Recuerde que los arrays de Lua empiezan en el índice 1, no en 0.

local json = require("dkjson")
local nums = json.decode('[10, 20, 30]')
for i, v in ipairs(nums) do
  print(i, v)
end

Números y valores booleanos

Los números JSON se decodifican como números de Lua, y true/false de JSON se decodifican como valores booleanos de Lua.

Después de decodificarlos, puede utilizarlos directamente en operaciones aritméticas o condicionales.

local json = require("dkjson")
local d = json.decode('{"qty": 3, "paid": false}')
if not d.paid then
  print("unpaid, qty =", d.qty)
end

Gestionar null

JSON null es complicado porque Lua nil elimina una clave de una tabla. Las bibliotecas gestionan este caso de distintas formas.

dkjson decodifica null en un valor centinela, json.null, para que la clave siga existiendo. Compárelo con ese valor para detectar los valores null.

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

Decodificar desde un archivo

A menudo, el JSON se encuentra en un archivo. Lea todo el archivo en una cadena y después decodifíquela.

Este patrón es habitual para cargar configuraciones o estados de partidas guardados.

local json = require("dkjson")
local f = io.open("config.json", "r")
local text = f:read("*a")
f:close()
local cfg = json.decode(text)
print(cfg.theme)

Los tres valores devueltos

El decode de dkjson devuelve hasta tres valores: el resultado decodificado, la posición en la que se detuvo el análisis y un mensaje de error.

Si la operación tiene éxito, el resultado no es nil; si falla, es nil y el tercer valor explica el motivo.

local json = require("dkjson")
local obj, pos, err = json.decode('{"a":1}')
print(obj.a, pos, err)

Validar la entrada

No confíe nunca en el JSON externo. Compruebe siempre el resultado antes de utilizarlo para evitar que una carga mal formada bloquee su programa.

local json = require("dkjson")
local function safeDecode(s)
  local v, _, err = json.decode(s)
  if not v then return nil, err end
  return v
end

Diferencias de cjson

lua-cjson funciona de forma similar, pero genera un error cuando recibe una entrada no válida en lugar de devolverlo. Envuélvalo en pcall para mayor seguridad.

cjson es más rápido, algo importante cuando se analizan grandes volúmenes de datos.

local cjson = require("cjson")
local ok, data = pcall(cjson.decode, '{"x":1}')
if ok then print(data.x) else print("error") end

Las claves ausentes son nil

Si lee una clave que no estaba presente en el JSON, Lua simplemente devuelve nil. Es normal y no genera un error.

Utilice un valor alternativo con or para proporcionar valores predeterminados a los campos opcionales.

local json = require("dkjson")
local d = json.decode('{"name": "Sam"}')
local age = d.age or 0
print(d.name, age)

Las tablas vacías son ambiguas

Tanto un objeto JSON vacío {} como un array vacío [] se decodifican en una tabla de Lua vacía. Después de la decodificación no puede saber cuál de los dos era.

Esto importa principalmente al volver a codificar; tenga presente esa ambigüedad en los recorridos de ida y vuelta.

Comprobación rápida

Compruebe lo que ha aprendido sobre la decodificación de JSON.

Resumen

La decodificación convierte el texto JSON en tablas de Lua: los objetos se convierten en tablas con claves de cadena y los arrays, en secuencias indexadas desde 1.

Valide siempre el resultado, gestione null mediante el valor centinela de la biblioteca y recuerde que las claves ausentes son simplemente nil. A continuación, volverá a codificar tablas de Lua en JSON.

Preguntas frecuentes

¿La lección «Decodificar JSON en tablas» es gratis?

Sí — el texto completo de «Decodificar JSON en tablas» 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 «Decodificar JSON en tablas»?

Analice cadenas JSON 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 2 de 4.

¿Cuánto tiempo toma la lección «Decodificar JSON en tablas»?

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