我是Play的新手! &Scala,但我正在尝试创建一个服务,将JSON请求映射到Map [String,JsObject](或Map [String,JsValue],我不确定区别),然后输出一个列表密钥递归地通过 Map (最好是树) .
但我有开始的问题:
def genericJSONResponse = Action(parse.json) {
request => request.body
var keys = request.keys
Ok("OK")
}
我期望这里的密钥是从请求中填充密钥,但当然,它不会编译 . 鉴于上述说明,我该如何处理?
在此先感谢您帮助Scala noob :-)
聂
1 回答
JsValue
是所有JSON值的基类 .JsObject
是JsValue
的子类型(以及JsNull
,JsUndefined
,JsBoolean
,JsNumber
,JsString
和JsArray
) . 如果不清楚,请查看JSON规范:http://json.org/如果您知道正文请求中的JSON是JSON对象(与上面列出的其他类型相反),您可以对其进行模式匹配:
fields.toMap
是您想要的类型:Map[(String, JsValue)]
所以您可以使用map
或collect
递归处理对象的键 . (顺便说一下,你可以直接使用fields
,因为它是Seq[(String, JsValue)]
并且也支持map
和collect
) .