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

Scala, Circe, Json - how to remove parent node from 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.

我应该如何更改我的代码以删除 fields root 并将数据保留在 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"
  }
})