[英]How to decode a nested json into a List[Object] using Circe in Scala
[英]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.