json 支持参数化 Case 的解串器 类
json deserializer with support for parameterized Case Classes
刚遇到liftweb.json
不能用参数化的Case 类。
以下在运行时失败:
case class ResponseOrError[R](status: String, responseData: Option[R], exception: Option[Error]) {
}
val answer = json.extract[ResponseOrError[Response]]
与:
do not know how to get type parameter from R
是否有任何 JSON 反序列化器,它实际上适用于参数化 Case 类?
json4s 以您期望的方式工作。这是一个例子:
import org.json4s.{DefaultFormats, Formats}
import org.json4s.jackson.JsonMethods.parse
case class Z(str: String)
case class X[R](z: Option[R])
val json =
"""
|{
| "z": {
| "str" : "test"
| }
|}
""".stripMargin
implicit val formats: Formats = DefaultFormats.withStrictArrayExtraction
val result = parse(json).extract[X[Z]]
println(result)
输出
X(Some(Z(test)))
刚遇到liftweb.json
不能用参数化的Case 类。
以下在运行时失败:
case class ResponseOrError[R](status: String, responseData: Option[R], exception: Option[Error]) {
}
val answer = json.extract[ResponseOrError[Response]]
与:
do not know how to get type parameter from R
是否有任何 JSON 反序列化器,它实际上适用于参数化 Case 类?
json4s 以您期望的方式工作。这是一个例子:
import org.json4s.{DefaultFormats, Formats}
import org.json4s.jackson.JsonMethods.parse
case class Z(str: String)
case class X[R](z: Option[R])
val json =
"""
|{
| "z": {
| "str" : "test"
| }
|}
""".stripMargin
implicit val formats: Formats = DefaultFormats.withStrictArrayExtraction
val result = parse(json).extract[X[Z]]
println(result)
输出
X(Some(Z(test)))