#include "tlpp-core.th"
user function jsonObject_exemplo2()
local aPropriedades as array
local oJson1 as json
local oJson2 as json
local oJson3 as json
local cVar as character
local cRet as character
local lRet as logical
local nIdx as numeric
//Utilizar https://jsonlint.com para mostrar estrutura
//Character com conteudo json - ainda nao eh objeto json
cVar := '{' +;
'"ID_01": {"ID": 1,"Name": "TOTVS S.A.","CNPJ": "00.000.000/0001-00"},' +;
'"ID_02": {"ID": 2,"Name": "TOTVS Techfin","CNPJ": "00.000.000/0001-00"}' +;
'}'
//Duas formas de atribuir ao objeto json
//1) Cria um objeto JSON e faz atribuição a partir de uma variavel tipo character
oJson1 := JsonObject():New()
cRet := oJson1:FromJson(cVar)
if (valType(cRet) == "U")
conout("JsonObject populado com sucesso")
else
conout("Falha ao popular JsonObject. Erro: " + cRet)
endif
//2) Cria um objeto JSON dinamicamente
oJson2 := {"chave":"valor"}
oJson2["propriedade"] := "valor da sua propriedade"
//Pode atribuir outros tipos na propriedade: numeric, logical e json
oJson2["numeric"] := 1
oJson2["logical"] := .T.
oJson2["object"] := {"chave": "valor"}
//objeto:toJson - Permite exportar o objeto JSON para um character em formato JSON.
conout("Exemplo 1: " + oJson1:toJson())
//sera impresso: Exemplo 1: {"ID_01":{"ID":1,"Name":"TOTVSS.A.","CNPJ":"00.000.000/0001-00"},"ID_02":{"ID":2,"Name":"TOTVSTechfin","CNPJ":"00.000.000/0001-00"}}
conout("Exemplo 2: " + oJson2:toJson())
//sera impresso: Exemplo 2: {"chave":"valor","propriedade":"valor da sua propriedade","numeric":1,"logical":true,"object":{"chave":"valor"}}
//objeto:delName - Permite remover uma propriedade e seu valor do json
lRet := oJson2:delName("object")
if (lRet == .T.)
conout("Removeu propriedade com sucesso")
else
conout("Nao removeu propriedade")
endif
conout("Exemplo 3: " + oJson2:toJson())
//Espera-se que tenha executado a linha do IF
//sera impresso: Exemplo 3: {"chave":"valor","propriedade":"valor da sua propriedade","numeric":1,"logical":true}
//veja que a propriedade object foi removida
//Pode-se alterar o valor de uma propriedade diretamente
oJson2["numeric"] := 0
conout("Exemplo 4: " + oJson2:toJson())
//sera impresso: Exemplo 4: {"chave":"valor","propriedade":"valor da sua propriedade","numeric":0,"logical":true}
//veja que a propriedade numeric teve seu valor alterado de 1 para 0
//objeto:hasProperty - Verifica se o json possui uma chave
conout("linha 1: " + cValToChar(oJson1:hasProperty("ID_01"))) //linha 1
conout("linha 2: " + cValToChar(oJson1:hasProperty("ID_02"))) //linha 2
conout("linha 3: " + cValToChar(oJson1:hasProperty("ID_03"))) //linha 3
//sera impresso: .T. para as linhas 1 e 2, e .F. para a linha 3
//objeto:GetJsonText - retorna o valor de uma propriedade do json
conout("Exemplo 5: " + oJson1:GetJsonText("Name"))
//sera impresso: Exemplo 5: NULL, pois a propriedade Name esta dentro de um outro objeto
conout("Exemplo 6: " + oJson1:GetJsonText("ID_01"))
//sera impresso: Exemplo 6: {"ID":1,"Name":"TOTVS S.A.","CNPJ":"00.000.000/0001-00"}
conout("Exemplo 7: " + oJson1["ID_01"]["Name"])
//sera impresso: Exemplo 7: TOTVS S.A.
conout("Exemplo 8: " + oJson2:GetJsonText("numeric"))
//sera impresso: Exemplo 8: 0
//objeto:getJsonObject - retorna um objeto json - contido dentro de uma propriedade
oJson3 := oJson1:GetJsonObject("ID_01")
conout("Exemplo 9: " + oJson3:toJson())
//sera impresso: Exemplo 9: {"ID":1,"Name":"TOTVS S.A.","CNPJ":"00.000.000/0001-00"}
//objeto:getNames() - retorna um array com todas propriedades do json - exceto propriedades que contem tipo json
aPropriedades := oJson2:GetNames()
for nIdx := 1 to len(aPropriedades)
conout("aPropriedades[" + cValToChar(nIdx) + "]: " + cValToChar(aPropriedades[nIdx]))
next
//sera impresso: aPropriedades[1]: chave
// aPropriedades[2]: propriedade
// aPropriedades[3]: numeric
// aPropriedades[4]: logical
//limpa da memoria os objetos criados
FreeObj(oJson1)
FreeObj(oJson2)
FreeObj( |