Faz o parser Json de uma mensagem.
Sintaxe
Json_Parser( < cJson >, < nLen >, < @aJson >, < @nRet > )
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 |
Retorno
Nome | Tipo | Descrição |
---|---|---|
lRet | Lógico | 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.
Exemplos
Exemplo 1
#include 'protheus.ch' Static Function printJson(aJson, niv) VarInfo(niv, aJson) Return .T. User Function teste_json() Local oJson := nil // Objeto Json Local strJson1 := '{"inteiro":100,"double":10.32,"OK":true,"NOK":false,"NULO":null,"VAZIO":"","ROWS":[{"Estado":"BR-SP","Valor":530,"Data":"2012-09-19"},{"Estado":"BR-PR","Valor":5000,"Data":"2012-09-29"},[10,20,30,40], "ricardo"],"VETOR":[1,2,3,4]}' // Vetor Json Local strJson2 := '[1, 2,null, 3, 4, 5]' // Strings Json contatenadas (pega somente o primeiro) Local strJson3 := '{"Contador":1},null,{"Contador":"100"}' // Dados primarios (pega somente o primeiro) Local strJson4 := '"somente string", "str2", "str3"' // Dados primarios (pega somente o primeiro) Local strJson5 := '1, 2, 3, 4, 5' // Dados primarios (pega somente o primeiro) Local strJson6 := 'null, true, false' // Teste de erro, correto ate o caractere 23 caractere (no 24 falta o caractere de aspas dupla (") ) Local strJson7 := '{"val":1,"teste":false,x:=2}' Local strJson := Nil Local lenStrJson := 0 Local jsonfields := Nil Local nRetParser := 0 Local lRet := .F. oJson := tJsonParser():New() strJson := strJson1 lenStrJson := Len(strJson) jsonfields := {} lRet := oJson:Json_Parser(strJson, lenStrJson, @jsonfields, @nRetParser) If ( lRet == .F. ) ConOut("##### [JSON][ERR] " + "Parser 1 com erro" + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) ConOut("Erro a partir: " + SubStr(strJson, (nRetParser+1))) Else ConOut("[JSON] "+ "+++++ PARSER 1 OK num campos: " + AllTrim(Str(Len(jsonfields))) + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) printJson(jsonfields, "| ") EndIf ConOut("-------------------------------------------------------", "") strJson := strJson2 lenStrJson := Len(strJson) jsonfields := {} lRet := oJson:Json_Parser(strJson, lenStrJson, @jsonfields, @nRetParser) If ( lRet == .F. ) ConOut("##### [JSON][ERR] " + "Parser 2 com erro" + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) ConOut("Erro a partir: " + SubStr(strJson, (nRetParser+1))) Else ConOut("[JSON] "+ "+++++ PARSER 2 OK num campos: " + AllTrim(Str(Len(jsonfields))) + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) printJson(jsonfields, "| ") EndIf ConOut("-------------------------------------------------------", "") strJson := strJson3 lenStrJson := Len(strJson) jsonfields := {} lRet := oJson:Json_Parser(strJson, lenStrJson, @jsonfields, @nRetParser) If ( lRet == .F. ) ConOut("##### [JSON][ERR] " + "Parser 3 com erro" + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) ConOut("Erro a partir: " + SubStr(strJson, (nRetParser+1))) Else ConOut("[JSON] "+ "+++++ PARSER 3 OK num campos: " + AllTrim(Str(Len(jsonfields))) + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) printJson(jsonfields, "| ") EndIf ConOut("-------------------------------------------------------", "") strJson := strJson4 lenStrJson := Len(strJson) jsonfields := {} lRet := oJson:Json_Parser(strJson, lenStrJson, @jsonfields, @nRetParser) If ( lRet == .F. ) ConOut("##### [JSON][ERR] " + "Parser 4 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 4 num campos: " + AllTrim(Str(Len(jsonfields))) + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) printJson(jsonfields, "| ") EndIf ConOut("-------------------------------------------------------", "") strJson := strJson5 lenStrJson := Len(strJson) jsonfields := {} lRet := oJson:Json_Parser(strJson, lenStrJson, @jsonfields, @nRetParser) If ( lRet == .F. ) ConOut("##### [JSON][ERR] " + "Parser 5 com erro" + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) ConOut("Erro a partir: " + SubStr(strJson, (nRetParser+1))) Else ConOut("[JSON] "+ "+++++ PARSER 5 OK num campos: " + AllTrim(Str(Len(jsonfields))) + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) printJson(jsonfields, "| ") EndIf ConOut("-------------------------------------------------------", "") strJson := strJson6 lenStrJson := Len(strJson) jsonfields := {} lRet := oJson:Json_Parser(strJson, lenStrJson, @jsonfields, @nRetParser) If ( lRet == .F. ) ConOut("##### [JSON][ERR] " + "Parser 6 com erro" + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) ConOut("Erro a partir: " + SubStr(strJson, (nRetParser+1))) Else ConOut("[JSON] "+ "+++++ PARSER 6 OK num campos: " + AllTrim(Str(Len(jsonfields))) + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) printJson(jsonfields, "| ") EndIf ConOut("-------------------------------------------------------", "") strJson := strJson7 lenStrJson := Len(strJson) jsonfields := {} lRet := oJson:Json_Parser(strJson, lenStrJson, @jsonfields, @nRetParser) If ( lRet == .F. ) ConOut("##### [JSON][ERR] " + "Parser 7 com erro" + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) ConOut("Erro a partir: " + SubStr(strJson, (nRetParser+1))) Else ConOut("[JSON] "+ "+++++ PARSER 7 OK num campos: " + AllTrim(Str(Len(jsonfields))) + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser))) printJson(jsonfields, "| ") EndIf ConOut("-------------------------------------------------------", "") Return
Abrangência
Totvs Application Server com versão igual ou superior a 7.00.131227A
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas