【问题标题】:Applying conversion to play framework json element before applying to class在应用到类之前应用转换来播放框架 json 元素
【发布时间】:2016-02-26 22:25:48
【问题描述】:

我也有一堂课

case class Token(
              creationDate: Date,
              expires: Option[Date]
            ) {
  def toJson(): String = Json.stringify(Json.toJson(this))
}

object Token {
  def fromJson(json: String): Token = Json.parse(json).as[Token]

  implicit val tokenReads: Reads[Token] = (
    (JsPath \ "creation_date").read[Date] and
      (JsPath \ "expires").readNullable[Date]
    ) (Token.apply _)

  implicit val tokenWrites: Writes[Token] = (
    (JsPath \ "creation_date").write[Date] and
      (JsPath \ "expires").writeNullable[Date]
    ) (unlift(Token.unapply))

}

它是从 json 中创建的

{
  "creation_date": "2014-05-22T08:05:57.556385+00:00",
  "expires": null
}

问题是日期格式不能直接转换为日期,我希望以某种方式获取该字符串,并使用它进行转换

DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String string2 = "2001-07-04T12:08:56.235-07:00";
Date result2 = df2.parse(string2);

然后将其传递给 Token 构造函数,但我似乎无法弄清楚如何在 apply 函数中执行此操作

【问题讨论】:

  • 根据您使用的 Play 版本,日期的 JSON 阅读器可以“自定义”

标签: json scala playframework playframework-2.0


【解决方案1】:

如果你有特殊的日期格式,你可以将字符串映射到日期

def strToDate(string2: String): Date = {
  //... something such
  val df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
  df2.parse(string2);
}

implicit val tokenReads: Reads[Token] = (
  (JsPath \ "creation_date").read[String].map(strToDate) and
     (JsPath \ "expires").readNullable[String].map(_.map(strToDate))
  ) (Token.apply _)

【讨论】:

  • 太棒了,这似乎已经成功了,知道如何从 Date 对象返回到该格式的日期字符串吗?在 tokenWrites val 中。我似乎无法像你有读一样映射写
  • 没有map,但是有更多其他的写json的变种。您可以创建有关写作的新问题。
猜你喜欢
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2015-12-17
  • 1970-01-01
相关资源
最近更新 更多