从Scala中的JsValue中删除一个键

N3d*_*3da 10 scala playframework-2.0

这可能是一个非常简单的问题,但我找不到干净/可行的解决方案.我只想从我拥有的json对象中删除一个字段.比方说我有:

val body:Option[JsValue] = request.body.asJson
Run Code Online (Sandbox Code Playgroud)

身体看起来像:

{
     "url": "www.google.com",
     "id":  "123",
     "count" : 1,
     "label" : "test"  
 }
Run Code Online (Sandbox Code Playgroud)

我想从中删除字段"id".

我已经阅读了http://www.playframework.com/documentation/2.1.1/ScalaJsonTransformers案例#6,但遗憾的是无法完全理解它.(我对Scala和函数式编程很新)

谢谢!

Mic*_*jac 20

这可以作为a来完成JsObject,它扩展了JsValue:

body.as[JsObject] - "id"
Run Code Online (Sandbox Code Playgroud)


小智 5

当我想从 json 对象中删除嵌套字段时,我遇到了这个问题,并且由于减法对于嵌套字段不起作用,所以我添加了我最终使用的解决方案。

要从 JsObject 中删除字段,您可以使用 prune 删除该字段的整个路径。

对于上面的例子 -

val p = JsPath \ "id"
val res = p.prune(body.as[JsObject]).get
Run Code Online (Sandbox Code Playgroud)

如果你有一个像这样的嵌套对象 -

{
     "url": "www.google.com",
     "id":  {"first": "123", "second": "456"}
     "count" : 1,
     "label" : "test"  
 }
Run Code Online (Sandbox Code Playgroud)

你可以创建一个更具体的路径 -

val p = JsPath \ "id" \ "second"
val res = p.prune(body.as[JsObject]).get
Run Code Online (Sandbox Code Playgroud)