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 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ásicos local 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 monitoramento local 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 eventos local 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) 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ásicos local null_val = json.decode("null") -- nil local bool_val = json.decode("true") -- true local num_val = json.decode("42.5") -- 42.5 local str_val = json.decode("\"Hello\"") -- "Hello" -- Decodificar array JSON local 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 JSON local 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, metadata print(person.name) -- "Maria Santos" print(person.age) -- 28 print(person.skills[1]) -- "Python" print(person.metadata.department) -- "Engineering" -- Decodificar resposta de API local 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ções local 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 -- 10 local log_level = config.logging.level -- "info"