我有以下几点,并想在scala中使用jerkson,但我对此有问题。我确信这是一个非常业余的错误,但我希望能从这里得到一些帮助。
scala> val orig=List("this", List("a", "b", List("c", "d")))
orig: List[java.lang.Object] = List(this, List(a, b, List(c, d)))
val json_ver=generate(orig)
json_ver: String = ["this",["a","b",["c","d"]]]
//now i want to go from json_ver back to orig list of lists
//I've tried parse[List[Any]](json_ver)
//parse[List[List[Any]]](json_ver)一切都无济于事。如果有人能给我指出正确的方向,我将不胜感激。
发布于 2013-04-08 08:01:46
一句警告:最初的Codahale Jerkson已经是abandoned版本,没有针对Scala2.10的官方构建(尽管有针对2.10的some Github forks )。另一方面,jackson-module-scala ( jerkson包装的)是完全维护和支持的。
在澄清问题后编辑。
原始数据结构使用Any的List%s(List%s和String%s)。从解析器返回的是List,但其中的列表是java.util.ArrayList。该类型也是一个列表,但并不相同,并且不适合本地的Scala集合。其中,它具有不同的toString实现,这就是输出不同的原因。请注意,它仍然是Any的列表,只是不是Scala List。
解决这个问题的一种方法是使用集合转换器将其转换为Scala:
import scala.collection.JavaConverters._
// somewhere down the line
val parsedList = parse[List[Any]](json_ver)
parsedList.foreach {
case s: String => println("string: " + s)
case l: util.ArrayList[Any] => doSomething(l.asScala.toList)
}
...
def doSomething(lst: List[Any]) {
println(lst)
}另一种方法是,如果要使用Jackson,可以将其配置为使用Java数组:
val mapper = new ObjectMapper()
mapper.configure(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY, true)
mapper.registerModule(DefaultScalaModule)
mapper.readValue[List[Any]](json_ver, classOf[List[Any]])https://stackoverflow.com/questions/15868673
复制相似问题