繁体   English   中英

如何使用Scala Play库过滤JSLookup / JSObject

[英]How filter a JSLookup/JSObject with the Scala Play library

假设我有一些来自我们的API客户端的参数,如下所示:

val params = (request \ "params")

我想filter它们并删除某些键/值。 就像我得到:

{
  "foo": "bar",
  "hello": "world"
}

我想过滤到

{
  "foo": "bar"
}

这是我的WIP代码,但是,随着更高级的Scala人员可能会立即告诉您,它不起作用。

val params = (request \ "params").get.as[List[JsObject]]

val blacklistedParams = Seq("foo")

val approvedParams = params.filter((param: JsObject) => {
  !blacklistedParams.contains(param)
})

第一行总是失败。 我尝试过.get.as ,但总是会出错。 我还是Scala和类型的新手。

我想我想出了一种方法:

val params = (request \ "params").get.as[Map[String, JsValue]]

val blacklistedParams = Seq("foo")

val approvedParams = params.filter((param) => {
  !blacklistedParams.contains(param._1)
})

我对这种方法的唯一烦恼是._1 对我来说,对于下一个人来说,这不是很明显,这是参数的键/值对的键。

您可以使用-

val filtered = (request \ "params").as[JsObject] - "hello" 

完整示例:

def index = Action{
  val json = Json.obj(
      "params" -> Json.obj(
          "foo" -> "bar",
          "hello" -> "world"))

  val filtered = (json \ "params").as[JsObject] - "hello"         

  Ok(filtered)
}

输出:

{
  foo: "bar"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM