gpt4 book ai didi

json - 如果缺少可选值,则显式输出JSON null

转载 作者:行者123 更新时间:2023-12-04 15:09:32 25 4
gpt4 key购买 nike

考虑使用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]
}

如果 locationNone,则生成的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中包含空值?

我要问的是类似于Jackson库中的 JsonInclude.Include.ALWAYS(也是Jackson的默认行为)。同样 in Gson这将是微不足道的
( new GsonBuilder().serializeNulls().create())。

Play 2.4.4

最佳答案

Greg Methvin,Play提交者,在相关的GitHub问题中对我来说是wrote this answer:

The JSON macros only support one way of encoding optional values, which is to omit None values from the JSON. This is not a bug but rather a limitation of the implementation. If you want to include nulls you're unfortunately going to have to implement your own Writes.

I do think we should try to provide more configurability for the macros though.



在这种情况下,即使值略微牺牲了API的一致性和可自我记录性,我也会让Play在该值为null时排除该字段。 (在这个特定的API中)仍然是一件很小的事情,以至于它不保证代码会像定制的 Writes对于具有十几个值的case类所需要的那样丑陋。

我希望他们能在将来的Play版本中使此配置更具可配置性。

关于json - 如果缺少可选值,则显式输出JSON null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34317253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com