在scala中使用jerkson获取列表列表

时间:2013-04-07 22:35:09

标签: json scala jerkson

我有以下内容,并希望在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)

一切都无济于事。如果有人能指出我正确的方向,我真的很感激

1 个答案:

答案 0 :(得分:2)

警告:原始的Codahale Jerkson已经abandoned并且没有针对Scala 2.10的正式构建(尽管有some Github for for 2.10)。另一方面,jackson-module-scalajerkson包装)得到了完全维护和支持。

澄清问题后,

[编辑]。

原始数据结构使用List AnyList 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}}