Boa tarde, pessoal!
Me deparei com uma situação usando Json no AdvPL que não sei dizer se é comportamento ou não conformidade.
Ao preencher um objeto Json e em seguida usar o método ToJson para obter a string, a ordem de criação das chaves não é mantida. Exemplo:
User Function TSTJSON
Local jJson
Local cJson
jJson := JsonObject():New()
jJson['texto1'] := 'teste1'
jJson['numero'] := 1234
jJson['texto2'] := 'teste2'
cJson := jJson:ToJson()
Return
Ao usar o programa de exemplo acima, estou obtendo o seguinte retorno:
"{"texto1":"teste1","texto2":"teste2","numero":1234}"
O certo não seria assim?
"{"texto1":"teste1","numero":1234,"texto2":"teste2"}"
Se for comportamento, existe alguma forma de ao realizar o ToJson ele manter a ordem declarada?
Olá Giordano,
O comportamento é esse mesmo, JSON não possui ordenação, e não há forma de mantê-lo ordenado.
Se você deseja manter a ordem dos elementos, teria que criar o json "na mão", usando strings ou trabalhar com arrays.
Nesse link , você consegue ler um trecho que diz:
Um objeto é um conjunto desordenado de pares nome/valor
Bom dia! Entendi, obrigado pelo apoio de sempre Daniel.
mail
Junho 22, 2022, 12:22am
4
É isso mesmo. Se for utilizada a classe JsonObject, ele não manterá a ordem conforme documentação do TDN: https://tdn.totvs.com/display/tec/Classe+JsonObject
Note a observação no fim do artigo:
O objeto JSON é um objeto dinâmico e suas propriedades são criadas automaticamente quando utilizadas como no exemplo acima.
Se quiser manter a ordem e um aspecto menos 'minimizado' do conteúdo terá que gerar o conteúdo json manualmente.
Abraços,
Cirqueira
mail@cirqueira.com
https://cirqueira.com
Já está em desenvolvimento uma correção para esta situação na release 20.3.1.0 do appserver (https://tdn.totvs.com/display/tec/Application+Server+-+20.3.1.0 )