Codificando tabelas em JSON
Serializar dados de Lua.
Codificando tabelas em JSON é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 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 codificação
A codificação é o inverso da decodificação: transforma uma tabela Lua em um texto JSON. Chame json.encode(table).
O resultado é um texto de uma única linha que você pode gravar em um arquivo ou enviar pela rede.
local json = require("dkjson")
local t = { name = "Leo", age = 9 }
print(json.encode(t))Objetos vs. vetores
A forma como uma tabela Lua é codificada depende de suas chaves. Uma tabela com chaves inteiras consecutivas começando em 1 se torna um vetor JSON.
Uma tabela com chaves de texto se torna um objeto JSON. Tabelas mistas são ambíguas e devem ser evitadas.
local json = require("dkjson")
print(json.encode({ 1, 2, 3 })) -- [1,2,3]
print(json.encode({ a = 1, b = 2 })) -- {"a":1,"b":2}Formatação legível
Por padrão, o JSON é compacto. O dkjson pode recuar a saída para facilitar a leitura quando você passa uma tabela de opções com indent = true.
A saída formatada é ótima para arquivos de configuração que serão editados por pessoas.
local json = require("dkjson")
local t = { name = "Ann", roles = { "dev", "lead" } }
print(json.encode(t, { indent = true }))Codificação de números e booleanos
Os números e booleanos do Lua são codificados diretamente em seus equivalentes JSON. Tanto inteiros quanto números de ponto flutuante se tornam números JSON.
local json = require("dkjson")
local t = { count = 5, ratio = 1.5, active = true }
print(json.encode(t))O problema de nil
Você não pode armazenar nil em uma tabela para representar o JSON null, porque atribuir nil remove a chave por completo.
Para emitir um nulo literal, use o marcador da biblioteca json.null como valor.
local json = require("dkjson")
local t = { middle = json.null }
print(json.encode(t)) -- {"middle":null}Vetores esparsos causam problemas
Se uma sequência tiver uma lacuna (por exemplo, o índice 2 for nil), o Lua deixará de tratá-la como um vetor uniforme. A codificação pode parar na lacuna ou se comportar de maneira inesperada.
Mantenha os índices do vetor contíguos, começando em 1, para obter vetores JSON previsíveis.
local json = require("dkjson")
local t = { [1] = "a", [3] = "c" } -- gap at 2
print(json.encode(t)) -- unreliableGravando JSON em um arquivo
Para persistir dados, codifique a tabela em uma cadeia de caracteres e grave essa cadeia em um arquivo.
É assim que você salva configurações, pontuações ou qualquer estado estruturado.
local json = require("dkjson")
local data = { theme = "dark", volume = 8 }
local f = io.open("settings.json", "w")
f:write(json.encode(data, { indent = true }))
f:close()Tabela vazia tem objeto como padrão
Uma tabela Lua vazia {} não tem chaves, portanto o dkjson a codifica como um objeto vazio {} por padrão, e não como um vetor.
Se precisar de um vetor vazio, o dkjson permite marcar a tabela; caso contrário, o tipo será ambíguo.
local json = require("dkjson")
print(json.encode({})) -- {}A ordem das chaves não é garantida
As tabelas do Lua não têm uma ordem inerente para chaves de texto, portanto a ordem dos campos no JSON codificado pode variar.
Não dependa da ordem dos campos; os consumidores de JSON devem localizar as chaves pelo nome, não pela posição.
Consistência no ciclo de ida e volta
Codificar e depois decodificar deve produzir uma tabela equivalente. Esse ciclo de ida e volta é uma boa maneira de testar o tratamento dos seus dados.
local json = require("dkjson")
local orig = { a = 1, list = { 2, 3 } }
local copy = json.decode(json.encode(orig))
print(copy.a, copy.list[2])Codificação com cjson
O lua-cjson também oferece encode. Ele é mais rápido, mas tem menos opções de formatação e gera erros em vez de retorná-los.
Para obter uma saída formatada com recuos, o dkjson costuma ser a opção mais fácil de usar.
local cjson = require("cjson")
local s = cjson.encode({ ok = true, n = 42 })
print(s)Verificação rápida
Teste sua compreensão da codificação de tabelas Lua.
Recapitulação
A codificação transforma tabelas Lua em cadeias de caracteres JSON. Sequências com chaves inteiras se tornam vetores, e tabelas com chaves de texto se tornam objetos.
Use json.null para nulos literais, mantenha os vetores contíguos e passe indent = true para obter uma saída legível. Em seguida, você lidará com dados profundamente aninhados.
Perguntas Frequentes
A aula “Codificando tabelas em JSON” é grátis?
Sim — o texto completo de “Codificando tabelas em JSON” é 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 “Codificando tabelas em JSON”?
Serializar dados de Lua. 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 3 de 4.
Quanto tempo leva a aula “Codificando tabelas em JSON”?
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