Função FWJsonSerialize

Estou utilizando a função FWJsonSerialize e ela está ordenando as Tags do JSON conforme tamanho dos campos, existe algum jeito da função transformar o objeto passado para ela de acordo com a inserção no objeto?

Exemplo:

oRetorno["teste01"] := "123456"

oRetorno["teste"] := "12345"

cJson := FWJsonSerialize(oRetorno, .F., .F., .T.)

Ele monta da seguinte forma:

{"teste":"12345","teste":"123456"}

Gostaria que ele montasse o JSON conforme abaixo:

{"teste01":"123456","teste":"12345"}

Bom dia Felipe,

Não seria melhor você utilizar da classe JsonObject do binário? A performance dela é muito superior, porém acredito que ela também não preservará a ordenação que você deseja, porém vale a pena um teste:
http://tdn.totvs.com/display/tec/Classe+JsonObject

Não faz muito sentido se preocupar com a ordem dos campos no objeto se ele é acessado pelo nome da proridade.

Boa noite. Por se tratar de um objeto não existe 'atributo antes' ou 'atributo depois'. Desta forma não há como controlar o retorno da serialização do objeto.

1 curtida

De acordo com a especificação do RFC R7159:

  • Um objeto é uma coleção não ordenada de zero ou mais pares de nome/valor, onde o nome é uma string e o valor é uma string, um número, um booleano, nulo, objeto ou um array.
  • Um array é uma sequência ordenada de 0 ou mais valores.

Como objetos não preservam ordem, se o faz necessário mantê-la (e ainda assim atrelar a uma chave), torna-se viável usar arrays de pares de nome/valor para representar.