Scala 可以用json4s将JSON数组解析成元组吗?
以以下为例:Scala 可以用json4s将JSON数组解析成元组吗?,scala,json4s,Scala,Json4s,以以下为例: import org.json4s.native.JsonMethods._ import org.json4s._ implicit val formats = DefaultFormats case class A(name: String) case class B(age: Int) val json = parse("""[ {"name": "mark"}, { "age": 27 }, 5 ]""") json.extract[Tuple3[A, B, Int]]
import org.json4s.native.JsonMethods._
import org.json4s._
implicit val formats = DefaultFormats
case class A(name: String)
case class B(age: Int)
val json = parse("""[ {"name": "mark"}, { "age": 27 }, 5 ]""")
json.extract[Tuple3[A, B, Int]]
这个错误是:
org.json4s.package$MappingException:没有可用的值用于_1没有可用的
名称的值未找到可转换为的值
java.lang.String
似乎有元组支持。我不确定在json4s中是否有任何内置的方法可以做到这一点。我通常是这样解决这个问题的
implicit val formats = DefaultFormats
class MySerializer extends CustomSerializer[Tuple3[A,B,Int]](format => (
{
case JArray(x :: y :: z :: Nil ) => {
( x.extract[A], y.extract[B], z.extract[Int])}
},
{
case x:Tuple3[A,B,Int] => null
}
))
implicit val formats = DefaultFormats + new MySerializer
val json = parse("""[ {"name": "mark"}, { "age": 27 }, 5 ]""")
json.extract[Tuple3[A,B,Int]]
然后从您的代码中执行如下操作
implicit val formats = DefaultFormats
class MySerializer extends CustomSerializer[Tuple3[A,B,Int]](format => (
{
case JArray(x :: y :: z :: Nil ) => {
( x.extract[A], y.extract[B], z.extract[Int])}
},
{
case x:Tuple3[A,B,Int] => null
}
))
implicit val formats = DefaultFormats + new MySerializer
val json = parse("""[ {"name": "mark"}, { "age": 27 }, 5 ]""")
json.extract[Tuple3[A,B,Int]]
是的,我最终选择了自定义序列化程序。谢谢