簡體   English   中英

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根並將數據保留在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"
  }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM