JsonObject
Classe TLPP para manipular JSON. Faz parse, serializacao e acesso por chave. Substitui completamente o antigo aHashMap.
Assinatura: JsonObject():new() -> oJson
Retorna: object
JsonObject e a forma moderna de manipular JSON em Protheus. Substitui hacks antigos com array de array. Suporta nested objects, arrays, conversao de e para string.
Sintaxe basica
local oJson as object
oJson := JsonObject():new()
// Criar JSON
oJson['nome'] := 'Mayco'
oJson['idade'] := 30
oJson['ativo'] := .T.
oJson['hobbies'] := {'protheus', 'claude'}
cStr := oJson:toJson()
// Resultado: {"nome":"Mayco","idade":30,"ativo":true,"hobbies":["protheus","claude"]}Parse de JSON
local oJson as object
oJson := JsonObject():new()
oJson:fromJson('{"cliente":"001","valor":1500.50}')
conout(oJson['cliente']) // 001
conout(oJson['valor']) // 1500.50Nested objects
oJson['endereco'] := JsonObject():new()
oJson['endereco']['rua'] := 'Av. Brasil'
oJson['endereco']['numero'] := 1000Iterar chaves
local aChaves as array
aChaves := oJson:getNames()
for i := 1 to len(aChaves)
conout(aChaves[i] + ' = ' + cValToChar(oJson[aChaves[i]]))
next iPegadinhas
- Chaves sao case-sensitive:
oJson['Nome']e diferente deoJson['nome'] - Valor inexistente retorna
nil— sempre verificar com!empty()ouvaltype() - Pra remover chave:
oJson:setProperty('nome', nil)
Exemplos
Parse e acesso
oJson := JsonObject():new()
oJson:fromJson(cJson)
cCliente := oJson['cliente']