【问题标题】:How to reverse the fields order when generate JSON with argonaut?使用 argonaut 生成 JSON 时如何反转字段顺序?
【发布时间】:2014-08-28 02:44:53
【问题描述】:

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

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

【问题讨论】:

  • 这两个命令没有区别。 JSON“对象”是无序的。
  • 这个json会被人眼读取,所以我想要某种“顺序”
  • 因此,提取“id”和“name”值并按照您希望的顺序显示它们。 JSON 不打算用作演示表单。

标签: json scala argonaut


【解决方案1】:

在 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(字符串化用户)时,您会看到订单。

【讨论】:

    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2020-07-09
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    相关资源
    最近更新 更多