Decodificando JSON em tabelas
Analise strings JSON.
Decodificando JSON em tabelas é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Fundamentos da decodificação
A decodificação transforma um texto JSON em um valor Lua com o qual você pode trabalhar. O ponto de entrada é json.decode(text).
Se o JSON no nível superior for um objeto, você obterá uma tabela Lua com chaves de texto; se for um vetor, obterá uma tabela com índices numéricos.
local json = require("dkjson")
local data = json.decode('{"id": 7}')
print(data.id)Lendo campos de objetos
Um objeto JSON decodificado se comporta como qualquer tabela Lua. Acesse os valores usando a notação de ponto ou de colchetes.
As chaves que não são identificadores Lua válidos, como as que contêm espaços, precisam da sintaxe com colchetes.
local json = require("dkjson")
local u = json.decode('{"name": "Mia", "full name": "Mia Lee"}')
print(u.name)
print(u["full name"])Decodificando vetores
Um vetor JSON é decodificado em uma tabela de sequência Lua indexada a partir de 1. Você pode percorrê-la com ipairs ou com um laço numérico.
Lembre-se: os vetores Lua começam no índice 1, não no 0.
local json = require("dkjson")
local nums = json.decode('[10, 20, 30]')
for i, v in ipairs(nums) do
print(i, v)
endNúmeros e valores booleanos
Números JSON são decodificados como números Lua, e JSON true/false são decodificados como valores booleanos Lua.
Depois da decodificação, você pode usá-los diretamente em operações aritméticas ou condicionais.
local json = require("dkjson")
local d = json.decode('{"qty": 3, "paid": false}')
if not d.paid then
print("unpaid, qty =", d.qty)
endLidando com null
JSON null é complicado porque Lua nil remove uma chave de uma tabela. As bibliotecas lidam com isso de maneiras diferentes.
O dkjson decodifica null como um valor sentinela json.null, para que a chave continue existindo. Compare-a com esse valor para detectar valores nulos.
local json = require("dkjson")
local d = json.decode('{"mid": null}')
if d.mid == json.null then
print("mid is null")
endDecodificando de um arquivo
É comum que o JSON esteja em um arquivo. Leia o arquivo inteiro para um texto e depois decodifique-o.
Esse padrão é comum ao carregar uma configuração ou o estado salvo de um jogo.
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)Os três valores retornados
O decode do dkjson retorna até três valores: o resultado decodificado, a posição em que a análise foi interrompida e uma mensagem de erro.
Em caso de sucesso, o resultado não é nulo; em caso de falha, ele é nil e o terceiro valor explica o motivo.
local json = require("dkjson")
local obj, pos, err = json.decode('{"a":1}')
print(obj.a, pos, err)Validando a entrada
Nunca confie em JSON externo. Verifique sempre o resultado antes de usá-lo, para que uma carga malformada não cause uma falha no seu 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
endDiferenças do cjson
O lua-cjson funciona de maneira semelhante, mas gera um erro para uma entrada inválida em vez de retorná-la. Envolva-o em pcall para obter segurança.
O cjson é mais rápido, o que importa ao analisar grandes volumes de dados.
local cjson = require("cjson")
local ok, data = pcall(cjson.decode, '{"x":1}')
if ok then print(data.x) else print("error") endChaves ausentes são nil
Se você ler uma chave que não estava presente no JSON, Lua simplesmente retornará nil. Isso é normal e não gera um erro.
Use um valor alternativo com or para fornecer valores padrão a campos opcionais.
local json = require("dkjson")
local d = json.decode('{"name": "Sam"}')
local age = d.age or 0
print(d.name, age)Tabelas vazias são ambíguas
Tanto um objeto JSON vazio {} quanto um vetor vazio [] são decodificados como uma tabela Lua vazia. Depois da decodificação, você não consegue saber qual dos dois era.
Isso importa principalmente quando você codifica os dados novamente; tenha essa ambiguidade em mente nas conversões de ida e volta.
Verificação rápida
Verifique o que você aprendeu sobre a decodificação de JSON.
Recapitulação
A decodificação converte texto JSON em tabelas Lua: objetos se tornam tabelas com chaves de texto, e vetores se tornam sequências indexadas a partir de 1.
Valide sempre o resultado, trate valores nulos usando o valor sentinela da biblioteca e lembre-se de que chaves ausentes são simplesmente nil. Em seguida, você aprenderá a codificar tabelas Lua de volta para JSON.
Perguntas Frequentes
A aula “Decodificando JSON em tabelas” é grátis?
Sim — o texto completo de “Decodificando JSON em tabelas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Decodificando JSON em tabelas”?
Analise strings JSON. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Decodificando JSON em tabelas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Por que JSON
- Decodificando JSON em tabelas
- Codificando tabelas em JSON
- Lidando com dados aninhados