问题描述
"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"
}
})