JSON 到 Map[String,JsObject] 与 Play 2.0?

标签 json scala playframework playframework-2.0

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

但我有开始问题:

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

我在这里期望的是用请求中的键填充键,但当然,它不会编译。鉴于上面的描述,我应该如何解决这个问题?

在此先感谢您帮助 Scala 菜鸟 :-)

尼克

最佳答案

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)。

关于JSON 到 Map[String,JsObject] 与 Play 2.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017214/

相关文章:

javascript - CosmosDB 保存/更新触发器以增加计数

scala - Play Swagger UI url 别名

mysql - 玩2.4 Hibernate JPA mysql 无法构建实体管理器工厂

ios - 将 NSData 转换为 NSString - NSLog 限制

json - 创建一个通用的 Json 序列化函数

performance - Scala Collection 排序、sortWith 和 sortBy 性能

scala - 隐式转换导致栈溢出

scala - 在 for 循环和条件语句中添加到 scala 映射

scala - 如何在Play 2中指定复杂的表单验证?

ios - 使用 swiftyjson 和 swift 解析嵌入的 json