有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Scala/Jerkson:在Json中指定日期对象的格式

我正在使用Jerkson Json library(用于Jackson的包装器)序列化包含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) 个答案

  1. # 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的一个不如liftjson的特性。后者允许将自定义解析器/格式化程序代码插入到解析层中。我想杰克森没有

    我们只是通过忽略它来绕过这个限制。我们喜欢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)
      }
    }