all*_*cer 1 json scala scala-cats circe
我有一个像这样的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"
  }
})