Bom dia pessoal,
Tenho a necessidade de armazenar em um log (.json) todas as requisições feitas em uma API.
Estou fazendo isso lendo campo a campo do json, mas gostaria de armazenar ele em um formato json, da forma que ele é enviado no body, nem a necessidade de ler campo a campo.
@nelieder a classe JsonObject permite você fazer isso, ela permite tanto criar um objeto Json a partir da String com o método fromJson() como fazer o inverso gerando uma string com o objeto Json atual, para isso use o método toJson().
Recentemente descobri que ela também tem os método fromJsonFile() para carregar o objeto a partir de um arquivo txt com o Json, e outro toJsonFile() para gravar o objeto atual diretemente para um arquivo TXT.
Não sei se você está usando a função FwJsonDeserialize() para gerar o objeto mas o objeto gerado não possui essa funcionalidade.
Olá,
Se você está recebendo um JSON, normalmente você recebe ele em formato de character, uma string.
Seria só salvar mesmo dessa forma, mas como citado pelo @cirilorocha , o ADVPL possui uma implementação de JSON que é a JsonObject
, que permite transformar uma string em JSON e um JSON em string, entre outras funcionalidades.
Então, um exemplo simples:
//Minha API
cBody := oRest:getBodyRequest()
//Caso o JSON inteiro seja o objeto do log, está pronto
salvarMeuLog(cBody)
//Caso deseje pegar um objeto específico dentro do body, aí entra a JsonObject
jBody := JsonObject():New()
jBody:fromJson(cBody)
//Exemplo, caso queira salvar somente os dados do JSON presente na propriedade data
salvarMeuLog(jBody["data"])
Caso a API esteja em TLPP, o JSON é nativo, é ainda mais fácil de manipular.
A função FWJsonDeserialize
é limitada, por conta disso ela foi descontinuada, além de ser mais lenta e mais pesada que a JsonObject
.
Documentações:
FWJsonDeserialize - Deserializa uma string no formato JSON - Frameworksp - TDN
Classe JsonObject - TOTVSTEC - TDN