使用Play 2.0映射[String,JsObject]的JSON?

时间:2012-04-04 18:32:44

标签: json scala playframework playframework-2.0

我是Play的新手! &安培; Scala,但我试图创建一个服务,将JSON请求映射到Map [String,JsObject](或Map [String,JsValue],我不确定区别),然后通过地图递归输出密钥列表(最好是树)。

但我有开始的问题:

def genericJSONResponse = Action(parse.json) {
  request => request.body
  var keys = request.keys
  Ok("OK")
}

我期望这里的密钥可以填充请求中的密钥,但当然,它不会编译。鉴于上述说明,我应该如何处理这个问题?

提前感谢您帮助Scala noob: - )

的Nik

1 个答案:

答案 0 :(得分:15)

JsValue是所有JSON值的基类。 JsObject是[{1}}的子类型(以及JsValueJsNullJsUndefinedJsBooleanJsNumber和{{ 1}})。如果不清楚,请查看JSON规范:http://json.org/

如果您知道正文请求中的JSON是JSON对象(与上面列出的其他类型相反),您可以对其进行模式匹配:

JsString

JsArray属于您想要的类型:def genericJSONResponse = Action(parse.json) { request => request.body match { case JsObject(fields) => Ok("received object:" + fields.toMap + '\n') case _ => Ok("received something else: " + request.body + '\n') } } 因此您可以使用fields.toMapMap[(String, JsValue)]递归处理对象的键。 (顺便说一下,您可以直接使用map,因为它是collect并且同时支持fieldsSeq[(String, JsValue)]