gpt4 book ai didi

json - 玩 & 乔达 : How to serialize an Option[DateTime] with a given `Writes`

转载 作者:行者123 更新时间:2023-12-01 19:33:46 24 4
gpt4 key购买 nike

我的日期的内部表示应该始终是具有 UTC 时区的 ISO 格式(我正在使用 Play 提供的 Joda 的 Reads/Writes):

import org.joda.time.{DateTime, DateTimeZone}
import org.joda.time.format.ISODateTimeFormat
import play.api.libs.json._
import play.api.libs.json.Reads._
import play.api.libs.json.Writes._

scala> val dateTime = DateTime.now(DateTimeZone.UTC)
dateTime: org.joda.time.DateTime = 2014-08-12T21:10:24.048Z

scala> val js = Json.toJson(dateTime)(jodaDateWrites("yyyy-MM-dd'T'HH:mm:ss'Z"))
js: play.api.libs.json.JsValue = "2014-08-12T21:10:24Z"

到目前为止一切顺利...但是如果我尝试序列化 Option[DateTime],我总是会收到此错误:

scala> val js = Json.toJson(Some(dt))(jodaDateWrites("yyyy-MM-dd'T'HH:mm:ss'Z"))
<console>:27: error: type mismatch;
found : play.api.libs.json.Writes[org.joda.time.DateTime]
required: play.api.libs.json.Writes[Some[org.joda.time.DateTime]]
Json.toJson(Some(dt))(jodaDateWrites("yyyy-MM-dd'T'HH:mm:ss'Z"))

如果我省略 Writes 它会起作用...但当然格式不是我要找的格式:

scala> val js = Json.toJson(Some(dateTime))
js: play.api.libs.json.JsValue = 1407878787365

有没有一种方法可以序列化提供特定WritesOption[DateTime]

然后,我的最后一个问题是,当我尝试像这样使用 UTC 时区反序列化 JSON ISO 日期时...

val date = Json.parse(""" { "date": "2014-08-12T21:10:24Z" }""")

scala> val dt = date as (__ \ 'date).readNullable[DateTime](jodaDateReads("yyyy-MM-dd'T'HH:mm:ss'Z"))
dt: Option[org.joda.time.DateTime] = Some(2014-08-12T21:10:24.000+02:00)

...即使我指定了模式 "yyyy-MM-dd'T'HH:mm:ss'Z",我也会在本地时区返回一个 DateTime .

除了我自己编写 Writes 之外,还有其他选择吗?发送。

最佳答案

Writes.nullable(jodaDateWrites("yyyy-MM-dd'T'HH:mm:ss'Z")) 

这将序列化一个 Option[DateTime],但如果值为 None,则不会写入任何字段。

Writes.optionWithNull(jodaDateWrites("yyyy-MM-dd'T'HH:mm:ss'Z")) 

这也会序列化一个 Option[DateTime],但如果值为 None,则会写入 null

关于json - 玩 & 乔达 : How to serialize an Option[DateTime] with a given `Writes` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25274507/

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