0Pricing
Lua Academy · Aula

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)
end

Nú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)
end

Lidando 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")
end

Decodificando 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
end

Diferenç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") end

Chaves 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

  1. Por que JSON
  2. Decodificando JSON em tabelas
  3. Codificando tabelas em JSON
  4. Lidando com dados aninhados
← Voltar para Lua Academy