我有以下内容,并希望在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)
一切都无济于事。如果有人能指出我正确的方向,我真的很感激
答案 0 :(得分:2)
警告:原始的Codahale Jerkson
已经abandoned并且没有针对Scala 2.10的正式构建(尽管有some Github for for 2.10)。另一方面,jackson-module-scala
(jerkson
包装)得到了完全维护和支持。
[编辑]。
原始数据结构使用List
Any
(List
s和String
s}的List
个。从解析器返回的是java.util.ArrayList
,但其中的列表是toString
。该类型也是一个列表,但不一样,并且本身不适合Scala集合。除此之外,它具有Any
的不同实现,这就是输出不同的原因。请注意,它仍然是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)
}
的列表。
解决问题的一种方法就是使用集合转换器转换为Scala:
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]])
另一种方法是,如果您要使用Jackson,则可以将其配置为使用Java数组:
{{1}}