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(oJson2)
return .T.
|