0Pricing
Lua Academy · Aula

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

Acesso 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 crash

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

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

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

Verificaçã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

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