相关疑难解决方法(0)

使用lift-json使用Map [String,Any]属性反序列化案例类

我一直在努力通过lift-json做一些简单的事情:将地图序列化为JSON.

我知道,我知道 - "Root对象还不能是List或Map" - 但我现在愿意将它包装在一个案例类中,但我仍然无法让它工作.感谢一些堆栈溢出帮助,我有序列化工作,但我无法从字符串反序列化.我得到的错误如"没有可用的_值"和"没有关于类型的信息".

网上有其他较旧的帖子,表明类型提示是答案,但这只会导致一个不同的错误,如"不知道如何反序列化_ _".

对于Scala 2.8.0和Lift 2.2:

import net.liftweb.json._
import net.liftweb.json.Serialization.{read, write}

case class MapWrap(data: Map[String, Any])

object Scaffold {
    def main(args: Array[String]) {

        implicit val formats = Serialization.formats(NoTypeHints)
        //implicit val formats = Serialization.formats(ShortTypeHints(List(classOf[MapWrap])))
        //implicit val formats = Serialization.formats(FullTypeHints(List(classOf[MapWrap])))

        val ser = write(new MapWrap(Map[String,Any]("key" -> "value")))
        println("JSON: " + ser)
        println(read[MapWrap](ser))

    }
}
Run Code Online (Sandbox Code Playgroud)

该行println(read[MapWrap](ser))导致投诉"net.liftweb.json.MappingException:数据无可用值".

如何反序化这个case类包装器(或实现我的最终目标:read(write("key" - >"value"))))?

serialization json scala lift

6
推荐指数
1
解决办法
2941
查看次数

使用lift-json将Json值提取为Map

lift-json的文档表明我应该能够调用'values'来将我当前的JObject结构作为一个vanilla Scala Map.这种方法对我不起作用,因为'values'的返回类型是json.Values而不是Map,如示例所示.我究竟做错了什么?是否需要隐式导入才能完成此转换?

scala> val json = parse("""{"k1":"v1","k2":"v2"}""")         
json: net.liftweb.json.package.JValue = JObject(List(JField(k1,JString(v1)), JField(k2,JString(v2))))

scala> json.values                                  
res4: json.Values = Map((k1,v1), (k2,v2))

scala> res4.get("k1")                                        
<console>:18: error: value get is not a member of json.Values
   res4.get("k1")
Run Code Online (Sandbox Code Playgroud)

json scala deserialization

6
推荐指数
1
解决办法
6010
查看次数

标签 统计

json ×2

scala ×2

deserialization ×1

lift ×1

serialization ×1