Abrangência
Versão 17.3.0.7 e superiores
A partir da versão 17.3.0.7 será possível definir um objeto Json dentro do fonte TL++.
A sintaxe é similar a do Objeto Json:
{ "chave" : "valor" }
Exemplo 1:
JsonObject.tlpp
#include "tlpp-core.th" user function jsonObject_exemplo1() local varJson := { "teste" : { "var1" : "oioi", "var2": "oioi2", "var3": "oioi3" }} as json local varJson2 := { "teste" : 123} as json local varJson3 := { "teste" : { "var1" : varJson['teste']['var1'], "var2": "oioi2" }} as json conout(varJson['teste']['var1']) //"oioi" conout(varJson['teste']['var2']) //"oioi2" conout(varJson['teste']['var3']) //"oioi3" conout(varJson2['teste']) //123 conout(varJson3['teste']['var1'])//"oioi" conout(varJson3['teste']['var2'])//"oioi2" return
Exemplo 2:
Json.tlpp
#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(oJson2) return .T.
Saiba mais sobre a classe JsonObject:
Classe JsonObject
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas