【问题标题】:Remove a key from a JsValue in Scala从 Scala 中的 JsValue 中删除一个键
【发布时间】:2014-09-23 19:42:24
【问题描述】:

这可能是一个非常简单的问题,但我很难找到一个干净/有效的解决方案。 我只想从我拥有的 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 case#6,但遗憾的是无法完全理解。 (我对 Scala 和函数式编程很陌生)

谢谢!

【问题讨论】:

    标签: scala playframework-2.0


    【解决方案1】:

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

    body.as[JsObject] - "id"
    

    【讨论】:

    • 谢谢。我打算做这样的事情: val jsonTransformer = (__ \ 'id).json.prune; val newBody = body.get.transform(jsonTransformer) 但你的解决方案肯定更简单更好。
    • 美丽,公正,美丽。不断为 Scala 感到惊讶。
    • 如果要删除嵌套字段怎么办?
    【解决方案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
    

    【讨论】:

      【解决方案3】:

      您可以使用as Method as[JsObject] 和减号- 符号。如下所示。

      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 以了解选择显式正文解析器、组合正文解析器和编写自定义正文解析器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-27
        • 2014-03-24
        相关资源
        最近更新 更多