Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Scala Play库过滤JSLookup/JSObject_Scala_Playframework - Fatal编程技术网

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

如何使用Scala Play库过滤JSLookup/JSObject,scala,playframework,Scala,Playframework,假设我有一些来自API客户端的参数,如下所示: val params = (request \ "params") 我想过滤它们并删除某些键/值。如果我得到: { "foo": "bar", "hello": "world" } 我想把它过滤到 { "foo": "bar" } { foo: "bar" } 这是我的WIP代码,但是,更高级的Scala用户可能会马上告诉我,它不起作用 val params = (request \ "params").get.as[Lis

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

val params = (request \ "params")
我想过滤它们并删除某些键/值。如果我得到:

{
  "foo": "bar",
  "hello": "world"
}
我想把它过滤到

{
  "foo": "bar"
}
{
  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)
})

这种方法唯一让我烦恼的是
\u 1
。对我来说,下一个人不太清楚这是参数的key/val对的密钥。

您可以使用
-

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)
}
输出: