Json não mantem ordem de criação

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.

É 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)