【问题标题】:JSON to Map[String,JsObject] with Play 2.0?JSON to Map[String,JsObject] with Play 2.0?
【发布时间】:2012-04-18 12:29:59
【问题描述】:

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

但我遇到了启动问题:

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

我在这里期望的是用请求中的密钥填充密钥,但当然,它不会编译。鉴于上述描述,我应该如何处理?

提前感谢您帮助 Scala 菜鸟 :-)

尼克

【问题讨论】:

标签: json scala playframework playframework-2.0


【解决方案1】:

JsValue 是所有 JSON 值的基类。 JsObjectJsValue 的子类型(以及 JsNullJsUndefinedJsBooleanJsNumberJsStringJsArray)。如果不清楚,请查看 JSON 规范:http://json.org/

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

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.toMap 是您想要的类型:Map[(String, JsValue)],因此您可以使用mapcollect 递归处理对象的键。 (顺便说一句,你可以直接使用fields,因为它是一个Seq[(String, JsValue)],并且还支持mapcollect

【讨论】:

  • @niklassaers 很高兴你喜欢它。
猜你喜欢
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2017-08-23
  • 2021-09-01
  • 1970-01-01
  • 2022-12-27
  • 2015-01-07
相关资源
最近更新 更多