如何在使用argonaut生成JSON时反转字段顺序?

时间:2014-08-28 02:44:53

标签: json scala argonaut

使用argonaut,我可以生成一些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

我想找到一种以相同顺序编写它们的方法

1 个答案:

答案 0 :(得分:0)

首先在Encoder中以该顺序定义字段为 -

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)

当你打印t(字符串化的用户)时,你会看到订单。