0Pricing
Lua Academy · Aula

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

Gravando 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

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