2014-08-28 2 views
1

С argonaut, я могу сгенерировать JSON как:Как изменить порядок полей при генерации JSON с аргонавтом?

def toJson(user:User) = ("id" := user.id) ->: ("name" := user.name) ->: jEmptyObject 

Но он будет генерировать JSON с обратной последовательности:

{ 
    "name": "myname", 
    "id": "123" 
} 

На самом деле я хочу, чтобы это было:

{ 
    "id": "123", 
    "name": "myname" 
} 

ли есть ли способ сделать это? Я не хочу, чтобы написать:

("name" := user.name) ->: ("id" := user.id) ->: jEmptyObject 

Я хочу, чтобы найти способ, чтобы написать их в том же порядке

+2

Нет разницы между двумя заказами. Объекты JSON неупорядочены. –

+0

Этот json будет прочитан человеческими глазами, поэтому я хочу иметь какой-то «порядок» – Freewind

+1

Итак, извлеките значения «id» и «name» и представьте их в том порядке, в котором вы хотите. JSON не предназначен для представления формы. –

ответ

0

Определить поле в том порядке, в первый кодировщик, как -

implicit def EncodeUserJson: EncodeJson[User] = EncodeJson[User]((p: User) ⇒ 
("id" := p.id) ->: 
    ("name" := p.name) ->: jEmptyObject) 

Следующая использование nospace но сохранить порядок -

val t = PrettyParams.nospace.copy(preserveOrder = 
true).pretty(user.asJson) 

при печати т (что stringifi ed user), вы увидите заказ.