Lidando com dados aninhados
Trabalhe com estruturas complexas.
Lidando com dados aninhados é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 4 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.
Dados aninhados estão por toda parte
O JSON do mundo real raramente é plano. Os objetos contêm objetos, e os vetores contêm objetos, muitas vezes em vários níveis de profundidade.
No Lua, isso significa tabelas dentro de tabelas. A boa notícia é que decode e encode lidam automaticamente com o aninhamento.
Um objeto dentro de outro objeto
Quando um valor JSON é, por si só, um objeto, ele é decodificado como uma tabela Lua aninhada. Você acessa níveis mais profundos encadeando o acesso aos campos.
local json = require("dkjson")
local d = json.decode('{"user": {"name": "Eve", "age": 30}}')
print(d.user.name)
print(d.user.age)Um vetor de objetos
Uma estrutura muito comum é um vetor JSON de objetos, como uma lista de registros. Ele é decodificado como uma sequência de tabelas.
Use um laço com ipairs e leia os campos de cada item.
local json = require("dkjson")
local d = json.decode('[{"id":1},{"id":2}]')
for _, item in ipairs(d) do
print(item.id)
endAcesso a dados profundamente aninhados
Você pode encadear acessos até a profundidade dos dados. Cada nível é apenas outra consulta a uma tabela.
Mas, se algum nível intermediário estiver ausente, o encadeamento causará o erro 'tentativa de indexar um valor nil'.
local json = require("dkjson")
local d = json.decode('{"a":{"b":{"c": 42}}}')
print(d.a.b.c)Acesso seguro a dados aninhados
Para evitar falhas causadas por níveis ausentes, verifique cada etapa ou use o curto-circuito de and.
O encadeamento de and para no primeiro nil e retorna nil em vez de causar um erro.
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 crashIterando sobre vetores aninhados
Os vetores podem conter objetos que contêm outros vetores. Aninhe seus laços para corresponder à estrutura.
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
endConstruindo tabelas aninhadas
Para codificar JSON aninhado, basta aninhar tabelas Lua. O codificador percorre toda a estrutura recursivamente.
local json = require("dkjson")
local t = {
user = { name = "Jo", roles = { "admin", "editor" } }
}
print(json.encode(t, { indent = true }))Modificando valores aninhados
Você pode ler, alterar e adicionar campos em qualquer profundidade antes de codificar novamente. Esse é o centro da transformação de dados.
local json = require("dkjson")
local d = json.decode('{"cfg":{"volume":5}}')
d.cfg.volume = 8
d.cfg.muted = false
print(json.encode(d))Combinando vetores e objetos
O JSON combina livremente vetores e objetos em diferentes níveis. O Lua reflete isso com tabelas de sequência e tabelas com chaves aninhadas umas nas outras.
Apenas certifique-se de que cada tabela tenha consistentemente uma forma ou outra.
local json = require("dkjson")
local t = {
team = "red",
members = { { id = 1 }, { id = 2 } }
}
print(json.encode(t))Percorrendo estruturas desconhecidas
Quando você não conhece a estrutura de antemão, use type() para inspecionar cada valor e aplicar recursão às tabelas.
Isso permite escrever processadores genéricos para JSON arbitrário.
local function walk(v)
if type(v) == "table" then
for k, sub in pairs(v) do walk(sub) end
else
print(v)
end
endTenha cuidado com nulos no aninhamento
Um nulo no interior de dados aninhados ainda é decodificado como json.null pelo dkjson. Leve isso em conta ao percorrer estruturas para não confundi-lo com uma tabela ou um valor real.
local json = require("dkjson")
local d = json.decode('{"a":{"b": null}}')
if d.a.b == json.null then
print("b is null")
endVerificação rápida
Teste como você lida com JSON aninhado no Lua.
Recapitulação
O JSON aninhado é mapeado para tabelas dentro de tabelas; decode e encode cuidam da recursão para você.
Acesse níveis mais profundos com encadeamentos, mas proteja-se contra níveis ausentes usando cadeias de and. Construa a saída aninhada aninhando tabelas Lua e lembre-se dos nulos e da distinção entre vetor e objeto em todos os níveis.
Perguntas Frequentes
A aula “Lidando com dados aninhados” é grátis?
Sim — o texto completo de “Lidando com dados aninhados” é 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 “Lidando com dados aninhados”?
Trabalhe com estruturas complexas. 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 4 de 4.
Quanto tempo leva a aula “Lidando com dados aninhados”?
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