如何在spray-json中正确反序列化嵌套对象?
import spray.json._
case class Person(name: String)
case class Color(n: String, r: Int, g: Int, b: Int, p: Person)
object MyJsonProtocol extends DefaultJsonProtocol {
implicit object ColorJsonFormat extends RootJsonFormat[Color] {
def write(c: Color) = JsObject(
"color-name" -> JsString(c.n),
"Green" -> JsNumber(c.g),
"Red" -> JsNumber(c.r),
"Blue" -> JsNumber(c.b),
"person-field" -> JsObject("p-name" -> JsString(c.p.name))
)
def read(value: JsValue) = {
value.asJsObject.getFields("color-name", "Red", "Green", "Blue", "person-field") match {
case Seq(JsString(name), JsNumber(red), JsNumber(green), JsNumber(blue), JsObject(person)) =>
Color(name, red.toInt, green.toInt, blue.toInt, null) //gotta replace null …
Run Code Online (Sandbox Code Playgroud) 如何在json4s中轻松重命名字段名?从他们的文档,我已经尝试了以下代码片段,但它似乎没有重命名该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"}
Run Code Online (Sandbox Code Playgroud)
使用Jackson库,通过声明注释很容易.但我正在寻找一个纯粹的scala库/解决方案.是否有更好的库或方法用于scala中的对象到json序列化,并且易于字段重命名?