【问题标题】:How to rename nested fields with Json4s如何使用 Json4s 重命名嵌套字段
【发布时间】:2017-08-23 04:42:58
【问题描述】:

正如标题所述,我正在尝试使用 Json4s 从案例类中重命名生成的 json 上的字段。

如果我尝试重命名简单案例类的字段,例如:

case class User(name: String, lastName: String)

您可以在 json4s 的文档或此处 How can I rename a field during serialization with Json4s? 中找到以下示例。

但文档没有提到如何进行嵌套对象重命名,例如在此示例中从 deviceId 到 did:

case class User(name: String, lastName: String, details: UserDetails)
case class UserDetails(deviceId: String)

我尝试使用类似的东西:

FieldSerializer.renameFrom("deviceId", "did")

或

FieldSerializer.renameFrom("details.deviceId", "details.did")

或

parse(message) transformField {
  case ("deviceId", value) => ("did", value)
}

或

parse(message) transformField {
  case ("details.deviceId", value) => ("details.did", value)
}

而且它们都不起作用,所以我的问题是:在 scala4s 上可以进行这种嵌套重命名吗?如果是,我该怎么做,例如将deviceId 重命名为did?

【问题讨论】:

    标签: scala json4s


    【解决方案1】:

    对于嵌套对象,可以创建FieldSerializer来绑定这个嵌套类型,比如:

      import org.json4s._
      import org.json4s.FieldSerializer._
      import org.json4s.jackson.Serialization.write
      val rename = FieldSerializer[UserDetails](renameTo("deviceId", "did")) // bind UserDetails to FieldSerializer
      implicit val format: Formats = DefaultFormats + rename
      println(write(u))
      > {"name":"name","lastName":"lastName","details":{"did":"deviceId"}}
    

    【讨论】:

      猜你喜欢
      • 2014-03-08
      • 2021-06-08
      • 2020-09-25
      • 2016-10-14
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      相关资源
      最近更新 更多