使用 Circe 检查 JSON 是否为空

问题描述

circe 是否提供任何函数来检查 io.circe.Json 对象是否为空?

Json 文档没有报告任何关于它的内容,而 JsonObject 文档讨论了 isEmpty 函数,但我证实了这一点

 {}.asJson.asObject.isEmpty // false

所以它不像我预期的那样工作。

解决方法

它不会以您预期的方式工作,因为如果底层 JSON 是对象,Json.asObject 会返回 Some,因为除此之外它还可以是 String、{{1 }}、NumberNull,因此 Array(仅出于示例的原因并不完全正确) - 返回 "{}".asObject 并且您收到 Some(JsonObject()) 因为 {{1 }}。 你想要的是:

false

斯卡斯蒂:https://scastie.scala-lang.org/GgHGChNoRlGq0HxmSkf76Q

,

我只是忘记了,因为 asObject 返回 Option[JsonObject],所以 isEmpty 只是检查它是 Some ?

.asObject.map(_.isEmpty).getOrElse(true)

作品