【发布时间】:2015-03-25 02:27:29
【问题描述】:
处理一个奇怪的 API,它将 startDate 和 startTime 作为单独的字段返回,我更愿意在我的案例类中使用单个 Joda DateTime 字段。我最终无法做到这一点,但想问更大的群体是否可能。似乎“和”应该可以在两个字段中作为字符串读取,并且鉴于我知道时区,我认为可以将它们组合成单个字符串并创建 DateTime 的实例,但我无法在适当的读取中表达这一点。
我在搞乱这些测试对象/JSON:
import org.joda.time.{ DateTime}
import play.api.libs.functional.syntax._
import play.api.libs.json.Reads._
import play.api.libs.json._
case class Example(startDate:String,startTime:String,name:String)
case class Desired(date:DateTime,name:String)
val json =Json.parse(
"""
|{
|"startDate": "2014-12-31",
|"startTime": "12:43",
|"name":"roger"
|}
| """.stripMargin)
我觉得这是在正确的轨道上,但不确定:
val singleDateBuilder = (JsPath \ "startDate").read[String] and (JsPath \ "startTime").read[String]
但后来我不确定下一步该做什么。
解决了这个问题,但可以改进还是应该以不同的方式完成?
val rawsm =
"""
|{
| "date": "2015-03-24",
| "time": "12:00:00"
|}
""".stripMargin
val reader = (
(__ \ "date").json.pick and
(__ \ "time").json.pick
).tupled.map(t => new DateTime(t._1.as[String] + "T" + t._2.as[String],DateTimeZone.UTC))
val single = Json.parse(rawsm).as[DateTime](reader)
【问题讨论】:
标签: json scala playframework-2.0