如何使用JSON写入将日期写入ISO 8601格式?

时间:2014-12-03 16:37:50

标签: json scala date playframework iso8601

我有一个案例calss

import java.sql.Date
case class GetMilestoneLanguage(
                               ...
                   due_date: Option[Date],
                                ...
                   )
object GetMilestoneLanguage {
  implicit val writes = Json.writes[GetMilestoneLanguage]
}

以UTC输出JSON - 我需要它是iso 8601.我不是在使用Joda时间。

在iso 8601中获取日期的最简单方法是什么?

由于

2 个答案:

答案 0 :(得分:7)

import play.api.libs.json.{Json, Writes}
import play.api.libs.json.Writes.dateWrites // do not import everything here, especially DefaultDateWrites

case class GetMilestoneLanguage(param1: String, dueDate: Option[java.sql.Date])

object GetMilestoneLanguage {
  implicit val customDateWrites: Writes[java.util.Date] = dateWrites("yyyy-MM-dd'T'HH:mm:ss'Z'")

  implicit val writes =  Json.writes[GetMilestoneLanguage]
}

这里的关键是定义你自己的隐式Writes[java.util.Date]。如果您导入DefaultDateWrites,您的customDateWrites将被默默忽略(我想知道为什么没有含糊不清的隐含警告)。

答案 1 :(得分:1)

您可以使用Writes[java.util.Date]随播广告对象上提供的帮助程序创建自定义Writes。但是,您将无法使用Json.writes宏助手。

import play.api.libs.json._
import play.api.libs.functional.syntax._
import play.api.libs.json.Writes._

case class GetMilestoneLanguage(param1: String, dueDate: Option[Date], param3: String)

object GetMilestoneLanguage {
  implicit val writes = (
    (__ \ "param1").write[String] and
    (__ \ "due_date").write(dateWrites("yyyy-MM-dd'T'HH:mm:ss'Z'")) and
    (__ \ "param3").write[String]
  )(unlift(GetMilestoneLanguage.unapply))
}