1

使用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

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

4

1 回答 1

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)

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

于 2017-10-31T20:10:58.220 回答