模式匹配任何列表

时间:2013-04-08 03:04:08

标签: json scala design-patterns

我使用scala json解析得到以下结果。

import scala.util.parsing.json.JSON._
val j: String = """["this",["a","b",["c","d"]]]"""
val parse_test=parseFull(j)

现在从这里我得到Option [Any]的结果

我可以使用get来获取结果(在这种情况下,我不关心无效的json格式,所以这应该是安全的,对吗?)

parse_test.get
res26: Any = List(this, List(a, b, List(c, d)))

现在,我应该如何从Any转到我预期的List?我假设我应该使用模式匹配,但我无法弄清楚。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

你可以做的是带有模式匹配和演员阵容的折叠:

test_result.fold[List[String]](Nil){
  case _ :: list :: _ => list.asInstanceOf[List[String]]
  case _ => Nil
}

假设你试图抛出第一个元素,第二个元素就是你想要的列表。

编辑:

请注意,如果第二个元素不是列表,则此强制转换将导致异常。这是真的可怕处理List [Any]并尝试解码其中的内容......

答案 1 :(得分:0)

这是我的解决方案:

scala> val Some(xs @ List(_*)) = parse_test
xs: List[Any] = List(this, List(a, b, List(c, d)))