问题描述
[
{
"a": "a","b": "b","c": "c"
},{
"a": "a1","b": "b1","c": "c1"
}
]
现在,我想删除c
的密钥。因此结果将是:
[
{
"a": "a","b": "b"
},"b": "b1"
}
]
我正在使用circe,到目前为止,我所做的是:
parse(entityAs[String]) match {
case Right(value) =>
val json = value.hcursor
val result = json.downArray.downField("c").delete
println(">>>>>>>>>>>>>>>>>")
println(result.right.as[List[Json]])
case Left(_) =>
}
此行有问题
val result = json.downArray.downField("c").delete
删除密钥c
然后使用circe将其转换回json列表的正确行是什么?
解决方法
delete
返回一个光标,该光标位于删除元素的位置。您想要返回整个文档,可以使用top
返回顶部。您将取回修改后的文档。给定
val doc = parse(entityAs[String])
通过
到达顶部doc.hcursor.downArray.downField("c").delete.top
会给你
Some([
{
"a" : "a","b" : "b"
},{
"a" : "a1","b" : "b1","c" : "c1"
}
])
但是据我了解,您也希望删除下一个“ c”。那是
doc.hcursor.downArray.downField("c").delete.right.downField("c").delete.top
或者,将其全部删除
def removeCs(element: ACursor): ACursor = {
val deleted = element.downField("c").delete
val focus = deleted.success.getOrElse(element)
focus.right.success match {
case Some(next) => removeCs(next)
case None => focus
}
}
removeCs(doc.hcursor.downArray).top