Campo Memo x REST

Boa tarde

Estou enviado um campo MEMO para uma API, mas recebo o seguinte erro:

descricaoCompleta":["'0x0D' is invalid within a JSON string

Que função posso converter o texto do campo memo para que as quebras de linhas sejam aceitas?

Tentei dessa forma: cDescEst := EncodeUtf8(cDescEst, "cp1252") nas não certo

Dessa forma funcionou: cDescEst := StrTran( cDescEst, CHR(13)+CHR(10), "\n" )

Mas não sei se é a maneira correta

Obrigado

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Thyago, como você está criando o json? Consegue colocar o seu código ou um POC?

Boa tarde Daniel…segue exemplo em anexo

é memo novo ou antigo? seria legal ver como você está montando a resposta, de onde vem a informação do campo MEMO etc.

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