访问Scala Map中的JSON元素

时间:2014-03-26 16:45:37

标签: scala

如何在以下代码中检索键“name”的值:

 import scala.util.parsing.json._

 val result = JSON.parseFull("""
   {"name": "Naoki",  "lang": ["Java", "Scala"]} 
 """)

 result match {
   case Some(e) => println(e) // => Map(name -> Naoki, lang -> List(Java, Scala))
   case None => println("Failed.")
 }

当我使用e("name")时,我得到了

error: Any does not take parameters
case Some(e) => println(e("name")) // => Map(name -> Naoki, lang -> List(Java, Scala))

println(result.flatMap(_.get("name")))解包让我:

error: value get is not a member of Any
println(result.flatMap(_.get("name")))

1 个答案:

答案 0 :(得分:3)

parseFull的{​​{3}}说:

  

def parseFull(input:String):选项[Any]

     

解析给定的JSON字符串并返回List [Any](如果是JSON)   string指定一个Array,如果是JSON字符串,则指定Map [String,Any]   指定一个对象。

因此,如果您更改match以查找Map[String, Any]案例,那么您可以调用其方法:

result match {
  case Some(m: Map[String, _]) => m("name")  // or m.get("name") for an Option
  case _ => sys.error("Failed.")
}