【问题标题】:Is it possible to parse JSON array into a tuple with json4s?是否可以使用 json4s 将 JSON 数组解析为元组?
【发布时间】:2015-08-09 22:08:11
【问题描述】:

举个例子:

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 没有可用值 没有可用 value for name 没有找到可以转换成的值 java.lang.String

【问题讨论】:

    标签: scala json4s


    【解决方案1】:

    Json4s scalaz 似乎支持元组。我不确定在 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]]
    

    【讨论】:

    • 是的,我自己最终选择了自定义序列化程序路线。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    相关资源
    最近更新 更多