Árvore de páginas

TLPP - LANGUAGE

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

  • Sem rótulos