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