Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
themeEclipse
languagecpp
titleExemplo 1
linenumberstrue
collapsefalse
#include 'protheus.ch'
 
User Function JSonHash()
  Local oJson := Nil
  Local strJson1 := '{"inteiro":100,"double":10.32,"OK":true,"NOK":false,"NULO":null,"VAZIO":"","ROWS":[{"Valor":5000,"OBJ":{"x":2},"Data":"2014-08-29"}, "ricardo"], "VETOR":[1,2,3,4]}'
  Local strJson := Nil
  Local lenStrJson := 0
  Local aJsonfields := Nil{}
  Local nRetParser := 0
  Local lRet := .F.
  Local oJHM := .F.
  Local xGet := Nil
  Local cGet := Nil
  // Cria o objeto para fazer o parser do Json
  oJson := tJsonParser():New()
// -------------------------------------------------------------------
  strJson = strJson1
  lenStrJson := Len(strJson)
  // Faz o Parser da mensagem JSon e extrai para Array (aJsonfields)
  aJsonfields := {}
  lRet = oJson:Json_Parser(strJson, lenStrJson, @aJsonfields, @nRetParser)
  If ( lRet == .F. )
      ConOut("##### [JSON][ERR] " + "Parser com erro" + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser)))
  Else
      ConOut("[JSON] "+ "+++++ PARSER OK num campos: " + AllTrim(Str(Len(aJsonfields))) + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser)))
      VarInfo("a->", aJsonfields)
  EndIf
  // Faz o Parser da mensagem JSon e extrai para Array (aJsonfields) e cria tambem um HashMap para os dados da mensagem (oJHM)
  aJsonfields := {}
  lRet = oJson:Json_Hash(strJson, lenStrJson, @aJsonfields, @nRetParser, @oJHM)
  If ( lRet == .F. )
    ConOut("##### [JSON][ERR] " + "Parser com erro" + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser)))
    ConOut("Erro a partir: " + SubStr(strJson, (nRetParser+1)))
  Else
    ConOut("[JSON] "+ "+++++ PARSER OK num campos: " + AllTrim(Str(Len(aJsonfields))) + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser)))
    //VarInfo("b->", aJsonfields)
    
    // Se nao for utilizar aJsonfields, libere o vetor
    aJsonfields := {}
    
    // Obtem o valor dos campos usando a chave
    cGet := "inteiro"
    lRet := HMGet(oJHM, cGet, xGet)
    If (lRet)
      VarInfo("c->", xGet)
    Else
      ConOut("ERRO ao obter: " + cGet)
    EndIf
    
    cGet := "ROWS[1]"
    lRet := HMGet(oJHM, cGet, xGet)
    If (lRet)
      VarInfo("d->", xGet)
    Else
      ConOut("ERRO ao obter: " + cGet)
    EndIf
    
    cGet := "ROWS[0].OBJ.x"
    lRet := HMGet(oJHM, cGet, xGet)
    If (lRet)
      VarInfo("e->", xGet)
    Else
      ConOut("ERRO ao obter: " + cGet)
    EndIf
    
    cGet := "VETOR[2]"
    lRet := oJHM:Get(cGet, xGet)
    If (lRet)
      VarInfo("f->", xGet)
    Else
      ConOut("ERRO ao obter: " + cGet)
    EndIf
    
    // Lista todas as Chaves do Json
    lRet := HMList(oJHM, xGet)
    If (lRet)
      ConOut("LISTA JSON HASHMAP:")
      VarInfo("LISTA", xGet)
    Else
      ConOut("ERRO ao obter: JSON HASHMAP")
    EndIf
  EndIf
  
Return
/*
CHAVES = VALORES
inteiro=100
double=10.32
OK=.T.
NOK=.F.
NULO=
VAZIO=""
ROWS[0].Valor=5000
ROWS[0].OBJ.x=2
ROWS[0].Data=2014-08-29
ROWS[1]=ricardo
VETOR[0]=1
VETOR[1]=2
VETOR[2]=3
VETOR[3]=4
*/

...