我想遍历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)
}
答案 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]]]) {...}
否则为所有预期的案例进行模式匹配。