遍历Scala中“Any”类型的集合

时间:2010-10-26 14:25:05

标签: scala

我想遍历github上Scala JSON工具包产生的集合。 问题是JsonParser返回“Any”所以我想知道如何避免以下错误:

“值foreach不是Any的成员”。

val json = Json.parse(urls)

for(l <- json) {...}

object Json {
  def parse(s: String): Any = (new JsonParser).parse(s)
}

3 个答案:

答案 0 :(得分:6)

您必须进行模式匹配才能遍历从解析器返回的结构。

/*
 * (untested)
 */
def printThem(a: Any) {
  a match {
    case l:List[_] => 
      println("List:")
      l foreach printThem
    case m:Map[_, _] =>
      for ( (k,v) <- m ) {
        print("%s -> " format k)
        printThem(v)
      }
    case x => 
      println(x)
  }
val json = Json.parse(urls)
printThem(json)

答案 1 :(得分:4)

使用lift-json解析器可能会更有运气,可在以下位置获取:http://github.com/lift/lift/tree/master/framework/lift-base/lift-json/

它有一个更丰富的类型安全的DSL可用,并且(尽管名称)可以在Lift框架之外完全独立使用。

答案 2 :(得分:0)

如果您确定在所有情况下只有一种类型,您可以提出以下演员:

for (l <- json.asInstanceOf[List[List[String]]]) {...}

否则为所有预期的案例进行模式匹配。