2017-02-10 59 views
0

说我有一些PARAMS从我们的API客户端发出这样的:如何筛选JSLookup/JSObject与斯卡拉玩库

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和类型,我还是一个新手。

回答

0

我想,我想出了一个办法:

val params = (request \ "params").get.as[Map[String, JsValue]] 

val blacklistedParams = Seq("foo") 

val approvedParams = params.filter((param) => { 
    !blacklistedParams.contains(param._1) 
}) 

我用这种方法唯一的烦恼是,._1。对我而言,对于下一个人来说,这不是很明显,这是关键/关键参数的关键。

0

您可以使用-

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" 
}