Armazenar em txt requisições de uma API

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.

3 curtidas

@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.

https://tdn.totvs.com.br/display/tec/Classe+JsonObject

2 curtidas

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

4 curtidas