首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Json4s重命名嵌套字段

如何使用Json4s重命名嵌套字段
EN

Stack Overflow用户
提问于 2017-08-23 12:42:59
回答 1查看 502关注 0票数 1

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

如果我尝试重命名简单case类上的字段,如下所示:

代码语言:javascript
复制
case class User(name: String, lastName: String)

下面的示例可以在json4s的文档中找到,也可以在这里找到How can I rename a field during serialization with Json4s?

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

代码语言:javascript
复制
case class User(name: String, lastName: String, details: UserDetails)
case class UserDetails(deviceId: String)

我试着使用像这样的东西:

代码语言:javascript
复制
FieldSerializer.renameFrom("deviceId", "did")

代码语言:javascript
复制
FieldSerializer.renameFrom("details.deviceId", "details.did")

代码语言:javascript
复制
parse(message) transformField {
  case ("deviceId", value) => ("did", value)
}

代码语言:javascript
复制
parse(message) transformField {
  case ("details.deviceId", value) => ("details.did", value)
}

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

EN

回答 1

Stack Overflow用户

发布于 2017-08-23 13:08:04

对于嵌套对象,可以创建FieldSerializer来绑定此嵌套类型,如下所示:

代码语言:javascript
复制
  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"}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45830788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档