如果返回的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
}
答案 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 _ => ""
}
}