7

How to easily rename field-names in json4s? From their documentation, i've tried the following snippet but it doesn't seem to rename the serial field to 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"}

With Jackson library, it's pretty easy by declaring an annotation. But i'm looking for a pure scala library/solution. Is there a better library or way for object-to-json serialization in scala with easy field-renaming?

Soviut
  • 88,194
  • 49
  • 192
  • 260
user3103600
  • 173
  • 1
  • 2
  • 5

2 Answers2

7

The code you have is returning the correct JSON with id as a field. Here is a slightly fuller example to evaluate in the console:

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"}
Soviut
  • 88,194
  • 49
  • 192
  • 260
kenrose
  • 186
  • 1
  • 5
  • 5
    To combine multiple renames, use '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"} ` – mmullis Mar 13 '17 at 21:10
0

Your code snippet has wrongly named implicit. It should be:

implicit val formats: Formats = DefaultFormats + rename
Tomek Samcik
  • 526
  • 4
  • 7