Scala、Circe、Json-如何从json中删除父节点?

我有一个像这样的json结构:

"data" : {
  "fields": {
    "field1": "value1",
    "field2": "value2"
  }
}

现在我想删除fields节点并将数据保留在data

"data" : {
   "field1": "value1",
   "field2": "value2"
 }

我试着这样做:

val result = data.hcursor.downField("fields").as[JsonObject].toOption.head.toString

但我得到了一个奇怪的结果,而不仅仅是字符串格式的 json

我也试过:

val result = data.hcursor.downField("fields").top.head.toString

但它是一样的:

val result = data.toString

它包括fields.

我应该如何更改我的代码以删除fieldsroot 并将数据保留在data属性下?

回答

这是一个完整的工作解决方案,它遍历 JSON、提取字段、删除它们然后将它们合并到data

import io.circe.Json
import io.circe.parser._

val s =
  """
    |{
    |"data": {
    |  "fields": {
    |    "field1": "value1",
    |    "field2": "value2"
    |  }
    |}
    |}
    |""".stripMargin

val modifiedJson =
  for {
    json <- parse(s)
    fields <- json.hcursor
                .downField("data")
                .downField("fields")
                .as[Json]
    modifiedRoot <- json.hcursor
                      .downField("data")
                      .downField("fields")
                      .delete
                      .root
                      .as[Json]
    res <-
      modifiedRoot.hcursor
        .downField("data")
        .withFocus(_.deepMerge(fields))
        .root
        .as[Json]
  } yield res

产量:

Right({
  "data" : {
    "field1" : "value1",
    "field2" : "value2"
  }
})


以上是Scala、Circe、Json-如何从json中删除父节点?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>