首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在scala中为列表列表使用jerkson

在scala中为列表列表使用jerkson
EN

Stack Overflow用户
提问于 2013-04-08 06:35:09
回答 1查看 188关注 0票数 0

我有以下几点,并想在scala中使用jerkson,但我对此有问题。我确信这是一个非常业余的错误,但我希望能从这里得到一些帮助。

代码语言:javascript
复制
  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)

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

EN

回答 1

Stack Overflow用户

发布于 2013-04-08 08:01:46

一句警告:最初的Codahale Jerkson已经是abandoned版本,没有针对Scala2.10的官方构建(尽管有针对2.10的some Github forks )。另一方面,jackson-module-scala ( jerkson包装的)是完全维护和支持的。

在澄清问题后编辑。

原始数据结构使用AnyList%s(List%s和String%s)。从解析器返回的是List,但其中的列表是java.util.ArrayList。该类型也是一个列表,但并不相同,并且不适合本地的Scala集合。其中,它具有不同的toString实现,这就是输出不同的原因。请注意,它仍然是Any的列表,只是不是Scala List

解决这个问题的一种方法是使用集合转换器将其转换为Scala:

代码语言:javascript
复制
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数组:

代码语言:javascript
复制
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]])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15868673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档