簡體   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