在PlayFramework 2.1中,我想读取json并创建一个case类。结构不同,所以我不能使用默认的阅读器。要将这两个字符串合并到java.util.Date,我需要编写什么内容?
import play.api.libs.functional.syntax._
import play.api.libs.json._
import play.api.libs.json.util._
import play.api.libs.json.Reads._
case class Person(name: String, lastSeen: Date)
val jsonString = Json.parse("""{name: "Joe", day: "2013-03-28", time: "09:35"}""")
val personLastSeen: Reads[Person] = (
(__ \ "name").read[String] ~
// (__ \ "day").read[String] (__ \ "time").read[String] // @TODO
)(Person)
我应该调换这个读数吗?我用dateStructure.parse(...)
试过val dateStructure = new SimpleDateFormat("yyyy-MM-dd HH:mm")
,但我想我需要一个Reads[Date]
发布于 2013-03-28 12:58:58
我认为您不能使用ReadsT组合器做到这一点,但是您可以定义一个特征读取及其方法def read(json: JsValue): JsResult[T]
import play.api.libs.functional.syntax._
import play.api.libs.json._
import play.api.libs.json.util._
import play.api.libs.json.Reads._
import java.util.Date
import java.text.SimpleDateFormat
case class Person(name: String, lastSeen: Date) {
}
object Person {
implicit val personLastSeen = new Reads[Person] {
val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm")
def reads(js: JsValue): JsResult[Person] = {
JsSuccess(Person(
(js \ "name").as[String],
sdf.parse((js \ "day").as[String] + " " + (js \ "time").as[Float])))
}
}
}
object Test extends App {
val jsonString = Json.parse("""{name: "Joe", day: "2013-03-28", time: "09:35"}""")
}
https://stackoverflow.com/questions/15681769
复制相似问题