【发布时间】:2018-02-26 12:49:13
【问题描述】:
我想解析Json 文件以读取可能可选提供的值。如果未提供它们,我有默认值可供选择。
显然在这种情况下,最终结果是我肯定会有一个值:要么是从Json 读取的值,要么是默认值。但是根据我目前对ScalaJson 的了解(如果我错了请纠正我),我仍然必须使用Option[T] 来保存它(因为它可能无法直接在Json 文件中使用) .换句话说,我相信虽然我可以提供一个默认值,但它仍然必须包含在Option[T]
有没有一种方法可以读取 可选 值(使用 default)而无需将其 包装 在 Option[T] 中?我想提前通知一下,我不需要(在可预见的将来)将我的数据写入(serialize)到Json,我只需要读取它(deserialize) Json.
进一步阐述我的问题:-
我正在使用automatic-conversion using case classes,因此不必将这个case class 与给定的reads 一起使用converter
case class MyCaseClass(optString: Option[String] = Some("None"))
implicit val reads = Json.reads[MyCaseClass]
我想用这个case class
case class MyCaseClass(optStringWithDefault: String = "None")
如果给定相同的Json 源,是否可以为此case class 编写read converter?或者,是否有更好的设计选择可以完全克服这个问题?
我来了
Scala 2.11.11PlayFramework 2.6
【问题讨论】:
-
您正在使用哪个 Play-JSON 版本。至少2.6.7支持生成的
Reads中的默认值:github.com/playframework/play-json/blob/2.6.7/play-json/shared/… -
谢谢@cchantep,我应该更努力地看。实际上,已经有很多关于此的问题已经得到解答。虽然这个解决方案似乎最适合
Play 2.6.xtold by @Aliaksandr Kavalevich
标签: scala playframework play-json