【发布时间】:2015-12-16 16:31:41
【问题描述】:
考虑这个使用 Play 的 JSON API (play.api.libs.json) 的示例:
case class FooJson(
// lots of other fields omitted
location: Option[LocationJson]
)
object FooJson {
implicit val writes = Json.writes[FooJson]
}
和
case class LocationJson(latitude: Double, longitude: Double)
object LocationJson {
implicit val writes = Json.writes[LocationJson]
}
如果location 是None,则生成的JSON 将根本没有location 字段。这很好,可以理解。但是如果我出于某种原因想要(例如,让我的 API 更加自文档化),我怎样才能在 JSON 中显式输出 null?
{
"location": null
}
我还尝试将字段定义为location: LocationJson 并将option.orNull 传递给它,但它不起作用(scala.MatchError: null play.api.libs.json.OWrites$$anon$2.writes)。对于 String 或 Double 等非自定义类型,这种方法会在 JSON 输出中产生 null。
所以,在使用 Json.writes[FooJson] 时(或同样简单的方法,即 不必 必须编写自定义的 Writes 实现),是否有一个干净的在 JSON 中包含空值的方法?
我要问的是类似于杰克逊图书馆中的JsonInclude.Include.ALWAYS(也是杰克逊的默认行为)。同样in Gson 这将是微不足道的
(new GsonBuilder().serializeNulls().create())。
播放 2.4.4
【问题讨论】:
标签: json scala playframework