如何解析Json对象并在scala中使用其变量

时间:2015-02-23 05:01:43

标签: json scala http servlets

如果返回的Json字符串是这样的话,如何获取访问令牌的值:

var result = Http("https://example.com").postForm(Seq("clientId" -> clientId, "clientSecret" -> clientSecret)).asString

var jsonObj = scala.util.parsing.json.JSON.parseFull(result.
accessToken = jsonObj.get("accessToken")

对example.com的请求结果是:

{
    "accessToken": "xxyyyzzz",
    "expiresIn": 3600
}

1 个答案:

答案 0 :(得分:2)

基本上,scala.util.parsing.json.JSON.parseFull会返回Option[ Any ]

Any因为返回类型取决于JSON输入的结构。

Option因为你的JSON字符串可能是错误的,因此如果出现错误则为None,如果成功则为Some[ Any ]

所以......在这种情况下你的JSON是,

{
    "accessToken": "xxyyyzzz",
    "expiresIn": 3600
}

这显然是一个地图类型的东西。所以......在这种情况下,返回类型将是Option[ Map[ String, Any] ]的实例,但将由Option[ Any ]类型的变量引用。

所以......你要做的就是关注,

val optionAny = scala.util.parsing.json.JSON.parseFull( result )

val accessToken = optionAny match {
    case None => ""
    case Some( mapAsAny ) => mapAsAny match {
        case m: Map[ String, Any ] => {
            // Map[ A, B].get( key: A ) returns Option[ B ]
            // So here m.get( "accessToken" ) Will return Option[ Any ]
            val optionToken = m.get( "accessToken" )
            optionToken match {
                case None =>  ""
                case Some( strAsAny ) => strAsAny match {
                    case str: String => str
                    case _ => ""
                }
            }
        }
        case _ => ""
    }
}