2013-03-28 14 views
0

在PlayFramework 2.1中,我想讀取一個json並創建一個案例類。結構不同,所以我不能使用默認閱讀器。我需要寫什麼來將兩個字符串合併到java.util.Date中?在PlayFramework 2.1中將日期和時間字符串解析爲一個具有日期的案例類

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) 

我應該換這個讀嗎?我試圖用val dateStructure = new SimpleDateFormat("yyyy-MM-dd HH:mm")dateStructure.parse(...)我想我需要一個Reads[Date]

回答

3

我覺得這個用讀[T]組合程序,但你可以定義一個特徵讀取和方法,你不能這樣做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"}""") 
}