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"
}
})
我有这样的 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"
}
})