LoginSignup
9
7

More than 5 years have passed since last update.

SprayでDateTimeをJSONに変換したい

Last updated at Posted at 2014-06-29

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"
9
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7