如何使用Scala Play库过滤JSLookup/JSObject
假设我有一些来自API客户端的参数,如下所示:如何使用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
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)
}
输出: