extract
基于中定义的每类型规则的JsonAST
DefaultFormats
和
CustomSerializer
有时我想进行跨场提取。例如,给定一个json字符串
{"a": 1, "b": 2}
,我想设置
b
进入之内
a+b
import org.json4s._
import org.json4s.native.JsonMethods._
import org.json4s.JsonAST._
case class A(a: Int, b: Int)
case object ACustomSerializer extends CustomSerializer[A](
format =>
({
case jo: JObject =>
val a = (jo \ "a").extract[Int]
val b = (jo \ "b").extract[Int] + a
A(a, b)
}, Map())
)
implicit val formats = DefaultFormats + ACustomSerializer
parse("""{"a": 1, "b": 2}""").extract[A] // A(1,3)
但是,如果
case class A
如果有许多其他字段,则很难为所有字段编写规则。
case class A(a: Int, b: Int, c: Int, d: Int)
case object ACustomSerializer extends CustomSerializer[A](
format =>
({
case jo: JObject =>
val a = (jo \ "a").extract[Int]
val b = (jo \ "b").extract[Int] + a
val c = ...
val d = ...
A(a, b, c, d)
}, Map())
)
或其他
b
有没有办法只为特殊字段编写规则,而让其他字段由
或
CustomSerialzer
?