[英]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.