Thyago,
Evite o máximo montar json "na mão", pois os caracteres ADVPL podem não ser compatíveis com a RFC do JSON, como a quebra de linha por exemplo.
Em ADVPL, uma quebra de linha normalmente é feita com CR + LF
, já no JSON é feita com \r\n
.
O Appserver possui o JsonObject
, que já faz todos os tratamentos necessários nos dados, exemplo:
//-------------------------------------------------------------------
/*/{Protheus.doc} u_makeMyJson
Exemplo de json com quebra de linha
@author Daniel Mendes
@since 09/06/2021
@version 1.0
/*/
//-------------------------------------------------------------------
function u_makeMyJson()
local cDescEst as character
local jJson as json
cDescEst := "Meu campo memo, x, y z, xisto, xpto" + CRLF + CRLF + "Continuando o campo memo, etc e tal" + CRLF + "Fim!" + CRLF + "Acabou mesmo!"
jJson := JsonObject():new()
jJson["descricao"] := cDescEst
ConOut(jJson:toJson())
return
Veja que no exemplo acima, a quebra de linha é feita no padrão ADVPL, porém o JSON é gerado no seguinte forma no console:
{"descricao":"Meu campo memo, x, y z, xisto, xpto\r\n\r\nContinuando o campo memo, etc e tal\r\nFim!\r\nAcabou mesmo!"}
É possível ver que a quebra de linha foi gerada corretamente pelo binário, isso pode ocorrer com outros caracteres, como tabulação por exemplo.
Como seu JSON parece ser um array de objetos, você pode montá-lo usando do método set
do JsonObject
:
//-------------------------------------------------------------------
/*/{Protheus.doc} u_myArrayJson
Exemplo de array de objetos json
@author Daniel Mendes
@since 09/06/2021
@version 1.0
/*/
//-------------------------------------------------------------------
function u_myArrayJson()
local aData as array
local jJson as json
local nI as numeric
jJson := JsonObject():new()
aData := {}
for nI := 1 to 5
aAdd(aData, JsonObject():new())
aData[nI]["contador"] := nI
next
jJson:set(aData)
ConOut(jJson:toJson())
return
Esse exemplo, vai gerar o seguinte JSON:
[{"contador":1},{"contador":2},{"contador":3},{"contador":4},{"contador":5}]
Documentação:
https://tdn.totvs.com/display/tec/Classe+JsonObject
https://tdn.totvs.com/display/tec/Json
Thyago, como você está criando o json? Consegue colocar o seu código ou um POC?
— Daniel Mendes 09 de Jun de 2021Boa tarde Daniel..segue exemplo em anexo
— Thyago Pedro Romeiro 09 de Jun de 2021é memo novo ou antigo? seria legal ver como você está montando a resposta, de onde vem a informação do campo MEMO etc.
— VINICIUS GATI 09 de Jun de 2021