如何使用Json4s

时间:2017-08-23 04:42:59

标签: scala json4s

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

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

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

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

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

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

1 个答案:

答案 0 :(得分: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"}}