【问题标题】:How can I rename a field during serialization with Json4s?如何在使用 Json4s 序列化期间重命名字段?
【发布时间】:2014-03-08 13:47:17
【问题描述】:

如何轻松重命名 json4s 中的字段名称?从他们的文档中,我尝试了以下 sn-p,但它似乎没有将 serial 字段重命名为 id

case class Person(serial: Int, firstName: String)

val rename = FieldSerializer[Person](renameTo("serial", "id"))

implicit val format = DefaultFormats + rename

write(Person(1, "Guest")) //returns {"serial":1,"firstName":"Guest"}

使用 Jackson 库,通过声明注释非常容易。但我正在寻找一个纯粹的 scala 库/解决方案。有没有更好的库或方法在 scala 中通过简单的字段重命名来实现 object-to-json 序列化?

【问题讨论】:

    标签: json scala json4s


    【解决方案1】:

    您拥有的代码将返回正确的 JSON,并将 id 作为字段。这是在控制台中评估的稍微完整的示例:

    import org.json4s._
    import org.json4s.FieldSerializer._
    import org.json4s.jackson.Serialization.write
    
    case class Person(serial: Int, firstName: String)
    val rename = FieldSerializer[Person](renameTo("serial", "id"))
    implicit val format: Formats = DefaultFormats + rename
    write(Person(1, "Guest")) // actually returns {"id":1,"firstName":"Guest"}
    

    【讨论】:

    • 要组合多个重命名,请使用 'orElse' 。 val renames = FieldSerializer[Person](renameTo("serial", "id") orElse renameTo("firstName", "first_name")); implicit val format: Formats = DefaultFormats + renames; write(Person(1, "Guest")) // returns {"id":1,"first_name":"Guest"}
    【解决方案2】:

    您的代码 sn-p 错误地命名为隐式。应该是:

    implicit val formats: Formats = DefaultFormats + rename
    

    【讨论】:

      猜你喜欢
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 2021-04-22
      相关资源
      最近更新 更多