Scala / Jerkson:在Json中指定Date对象的格式

时间:2012-11-22 09:52:21

标签: java json scala datetime jackson

我使用Jerkson Json libraryJackson的包装器)序列化包含Date的对象:

import com.codahale.jerkson.Json
import java.util.Date

case class JTest(
    val dTest: Date
)

val jt = new JTest(new Date())
println(Json.generate(jt))

结果是:

{"dTest":1353576079168}

有什么方法可以指定格式或覆盖生成函数吗?

我意识到Json没有正确的日期类型,因此输出(以毫秒为单位的unix时间)是“正确的”。我希望将我的日期序列化为ISO 8601(带时间/时区)格式的字符串:2007-04-05T01:12:22+0100,因为它易于解析且易于阅读。 Date的toString吐出Thu Nov 22 10:27:54 CET 2012

1 个答案:

答案 0 :(得分:1)

这里有两个问题。首先,ISO8601的次要问题是日期 - 这些可以使用SimpleDateFormat实现,例如。

import java.text._
import java.util._
val d1 = new Date()
val sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
println(sdf.format(d1))

格式化程序将解析格式。记住不要在线程之间共享它(而是在使用之前总是在本地范围内创建一个实例),因为它不是线程安全的。

其次,在Jerkson中自动使用日期的棘手问题。这似乎是Jerkson的一个特征,它不如Lift-json。后者允许将自定义解析器/格式化程序代码插入到解析层中。杰克逊没有,我想。

我们只是忽略了这个限制。我们喜欢Jerkson的优越性能,因此我们只使用Long和String进行日期传输,我们分别处理解析。例如

case class JTest(val dTest: String) {
  lazy val dTestDate: Date = {
    val sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
    sdf.parse(dTest)
  }
}