spray-jsonを使ってjoda-timeのDateTimeをJSONに変換する方法。
DateTimeのエンコード・デコードの方法のプロトコルを定義する:
DateTimeJsonProtocol.scala
import org.joda.time.{ DateTimeZone, DateTime }
import org.joda.time.format.ISODateTimeFormat
import spray.json.deserializationError
import spray.json.{ JsString, JsValue, RootJsonFormat, DefaultJsonProtocol }
object DateTimeJsonProtocol extends DefaultJsonProtocol {
implicit object DateTimeJsonFormat extends RootJsonFormat[DateTime] {
private lazy val format = ISODateTimeFormat.dateTimeNoMillis()
def write(datetime: DateTime): JsValue = JsString(format.print(datetime.withZone(DateTimeZone.UTC)))
def read(json: JsValue): DateTime = json match {
case JsString(x) => format.parseDateTime(x)
case x => deserializationError("Expected DateTime as JsString, but got " + x)
}
}
}
JSONに変換するサンプルコード:
import org.joda.time.DateTime
import spray.json._ // toJsonを使えるようになる
import DateTimeJsonProtocol._ // プロトコルを元にコンバートできるようになる
println(new DateTime().toJson)
出力結果:
"2014-06-29T22:33:33Z"