Módulo JSON
O módulo json fornece funções para converter entre dados Lua e formato JSON (JavaScript Object Notation). É útil para comunicação com APIs web, armazenamento de configurações, serialização de dados e interoperabilidade com outros sistemas.
Funções Disponíveis
Seção intitulada “Funções Disponíveis”1. json.encode(value)
Seção intitulada “1. json.encode(value)”Codifica um valor Lua em uma string JSON.
Parâmetros:
value(qualquer tipo): Valor a ser codificado para JSON.
Retorno:
string: Representação JSON do valor
Exceções:
-
Lança erro se o valor contiver referências circulares
-
Lança erro se a tabela tiver chaves de tipos mistos
-
Lança erro se não for possível serializar algum tipo de dado
Exemplos:
-- Codificar valores básicoslocal json_null = json.encode(nil) -- "null"local json_bool = json.encode(true) -- "true"local json_num = json.encode(42.5) -- "42.5"local json_str = json.encode("Hello\nWorld") -- "\"Hello\\nWorld\""
-- Codificar array (tabela com índices numéricos sequenciais)local array = {"apple", "banana", "orange"}local json_array = json.encode(array)-- Resultado: "[\"apple\",\"banana\",\"orange\"]"
-- Codificar objeto (tabela com chaves de string)local person = { name = "João Silva", age = 30, active = true, tags = {"developer", "backend"}, address = { street = "Rua das Flores, 123", city = "São Paulo" }}local json_person = json.encode(person)-- Resultado: {"name":"João Silva","age":30,"active":true,"tags":["developer","backend"],"address":{"street":"Rua das Flores, 123","city":"São Paulo"}}
-- Codificar dados de monitoramentolocal metrics = { timestamp = os.time(), hostname = "server-01", cpu_usage = 45.7, memory_mb = 2048, services = {"nginx", "postgresql", "redis"}, status = "healthy"}local json_metrics = json.encode(metrics)
-- Codificar lista de eventoslocal events = { { id = 1, type = "login", user = "admin", timestamp = "2024-01-15T10:30:00Z" }, { id = 2, type = "logout", user = "user1", timestamp = "2024-01-15T11:45:00Z" }}local json_events = json.encode(events)2. json.decode(string)
Seção intitulada “2. json.decode(string)”Decodifica uma string JSON em um valor Lua de forma assíncrona.
Parâmetros:
string(string): String JSON a ser decodificada
Retorno:
any: Objeto decodificado como um valor Lua (mais frequentemente uma tabela):
Exceções:
-
Lança erro se a string não for JSON válido
-
Lança erro se houver profundidade excessiva de aninhamento
-
Lança erro se números forem muito grandes ou muito pequenos
Exemplos:
-- Decodificar valores básicoslocal null_val = json.decode("null") -- nillocal bool_val = json.decode("true") -- truelocal num_val = json.decode("42.5") -- 42.5local str_val = json.decode("\"Hello\"") -- "Hello"
-- Decodificar array JSONlocal json_array = "[\"apple\", \"banana\", \"orange\"]"local array = json.decode(json_array)-- Resultado: {"apple", "banana", "orange"}print(array[1]) -- "apple"print(array[2]) -- "banana"print(#array) -- 3
-- Decodificar objeto JSONlocal json_person = [[{ "name": "Maria Santos", "age": 28, "active": true, "skills": ["Python", "Lua", "JavaScript"], "metadata": { "department": "Engineering", "level": "Senior" }}]]local person = json.decode(json_person)-- Resultado: tabela com chaves name, age, active, skills, metadataprint(person.name) -- "Maria Santos"print(person.age) -- 28print(person.skills[1]) -- "Python"print(person.metadata.department) -- "Engineering"
-- Decodificar resposta de APIlocal api_response = [[{ "status": "success", "data": { "users": [ {"id": 1, "name": "Alice", "email": "alice@example.com"}, {"id": 2, "name": "Bob", "email": "bob@example.com"} ], "total": 2, "page": 1 }, "timestamp": "2024-01-15T12:00:00Z"}]]local response = json.decode(api_response)if response.status == "success" then for _, user in ipairs(response.data.users) do print("Usuário: " .. user.name .. " (" .. user.email .. ")") end print("Total: " .. response.data.total)end
-- Decodificar configuraçõeslocal config_json = [[{ "server": { "host": "0.0.0.0", "port": 8080, "timeout": 30 }, "database": { "host": "localhost", "name": "monagent", "pool_size": 10 }, "logging": { "level": "info", "file": "/var/log/monagent.log" }}]]local config = json.decode(config_json)local server_host = config.server.host -- "0.0.0.0"local db_pool = config.database.pool_size -- 10local log_level = config.logging.level -- "info"