微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用circe从json数组中删除密钥

如何解决使用circe从json数组中删除密钥

我有一个json作为

[
  {
    "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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。