我正在使用scala 2.11.8,其中包含0.7.0
我使用scalajs与API区分不同的字段和发送的JSON中的null
字段。
我正在寻找一种将包含case class
字段的scala Option[T]
编码为JSON的方法,我将其设置为None
来表示缺失值:
case class Foo(
optionalFieldOne: Option[Int] = 42,
optionalFieldTwo: Option[Int] = null,
optionalFieldThree: Option[Int] = None
)
implicit FooEncoder: Encoder[Foo] = deriveEncoder[Foo]
val test = Foo()
//What the code actually produces
val.asJson.noSpace
//>{"optionalFieldOne": 42,"optionalFieldTwo":null, "optionalFieldThree":null}
//What I would like
val.asJson.noSpace
//>{"optionalFieldOne": 42,"optionalFieldTwo":null}
circe是否提供了任何可能的配置?您是否知道如何访问它,我已经查看了所有发行说明,github问题和他们的网站文档但没有成功。
如果此类配置选项不可用,有人会如何正确实施?
答案 0 :(得分:2)
使用dropNullKeys:
@param dropNullKeys确定是否从输出中删除值为null的对象字段。
答案 1 :(得分:0)
答案 2 :(得分:0)
implicit class JsonWrapper(val json: Json) {
def removeNulls(): Json = {
val result = json match {
case j1 if j1.isArray =>
j1.mapArray(_.map(_.removeNulls()))
case j2 if j2.isObject =>
j2.mapObject(_.removeNulls())
case v => v
}
result
}
}
implicit class JsonObjectWrapper(val json: JsonObject) {
def removeNulls(): JsonObject = {
json.mapValues{
case v if v.isObject => v.removeNulls()
case v if v.isArray => v.mapArray(_.map(_.removeNulls()))
case other => other
}.filter(!_._2.isNull)
}
}