这可能是一个非常简单的问题,但我找不到干净/可行的解决方案。 我只想从我拥有的json对象中删除一个字段。 假设我有:
val body:Option[JsValue] = request.body.asJson
身体看起来像:
{
"url": "www.google.com",
"id": "123",
"count" : 1,
"label" : "test"
}
我想从中删除字段“id”。
我已阅读http://www.playframework.com/documentation/2.1.1/ScalaJsonTransformers案例#6,但遗憾的是无法完全理解它。 (我对Scala和函数式编程很陌生)
谢谢!
答案 0 :(得分:20)
这可以JsObject
完成,扩展JsValue
:
body.as[JsObject] - "id"
答案 1 :(得分:2)
您可以使用带有as[JsObject]
符号的as Method -
。喜欢下面。
body.as[JsObject] - "id"
下面逐步详细说明。让我们看一下自定义对象。
val json: JsValue = JsObject(Seq(
"error" -> JsBoolean(false),
"result" -> JsNumber(calcResult),
"message" -> JsString(null)
))
可以通过as
方法选择并删除“ - ”符号。
/* Removing Message Property and keep the value in successResult Variable */
val successResult = json.as[JsObject] - "message"
在Scala中查看Body Parser以了解选择显式体解析器,组合体解析器和编写自定义体解析器。
答案 2 :(得分:2)
当我想从json对象中删除一个嵌套字段时,我遇到了这个问题,由于减法不适用于嵌套字段,因此我添加了最终使用的解决方案。
要从JsObject中删除字段,可以使用prune删除该字段的整个路径。
对于上面的示例-
val p = JsPath \ "id"
val res = p.prune(body.as[JsObject]).get
如果您有这样的嵌套对象-
{
"url": "www.google.com",
"id": {"first": "123", "second": "456"}
"count" : 1,
"label" : "test"
}
您可以创建更具体的路径-
val p = JsPath \ "id" \ "second"
val res = p.prune(body.as[JsObject]).get