Faz o parser Json de uma mensagem.
Sintaxe
Json_Hash( < cJson >, < nLen >, < @aJson >, < @nRet >, < @oHM > )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
cJson | Caractere | Mensagem no formato Json | X |
|
nLen | Numérico | Tamanho da mensagem Json que será avaliado | X |
|
aJson | Vetor | Vetor contendo todos os campos "parseados" da mensagem Json | X | X |
nRet | Numérico | Indica o número de caracteres lidos da mensagem Json | X | X |
oJHM | THashMap | Objeto do classe THashMap que contem os campos e os valores da mensagem Json | X | X |
Retorno
Nome | Tipo | Descrição |
---|---|---|
nRet | Numérico | Retorno do Parser. |
Observações
- Irá executar o parser na mensagem (cJson) até encontrar uma string Json válida ou um erro no formato, se o retorno (lRet) for.T., nRet irá indicar qual o tamanho da mensagem Json lida até encontrar uma mensagem válida, isto permite ter strings Json concatenadas e analisar cada parte, todavia se o retorno for .F., nRet irá indicar quantos caracteres válidos foram lidos, sendo o próximo caractere inválido.
- No Vetor (aJson) contendo os valores JSon, todo Objeto Json será indicado pelo nome "#_OBJECT_#" para que seja possível diferenciá-lo de um Lista/Vetor Json.
- Se não for usar aJson , limpe o seu conteúdo logo após a chamada da função para liberar memória.
Exemplos
Exemplo 1
#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 */
Abrangência
Totvs Application Server com versão igual ou superior a 7.00.131227A
Veja também
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas