2012-10-31 63 views
-4

play2框架JSON:約play2框架JSON知識

case class P(
    val name: String, 
    val age: Int, 
    val address: String 
) 
val pList = List(
    P("a", 18, "USA"), 
    P("b", 20, "USA") 
) 
Json.toJson(pList) 

爲什麼這個不能編譯?

+2

請給社區更多信息來重現問題。首先是遊戲版本號,第二是導入,至少有四個Json類在使用,最重要的是給我們編譯錯誤。 – Schleichardt

+0

您可以刪除'new'關鍵字,因爲它們不需要與案例類組合使用。 – fynn

回答

3

請看APIplay! website的例子。他們提供關於JSON的綜合指南。由於play.api.libs.json包僅包含7種JSON數據類型(JsObject,JsNull,JsUndefined,JsBoolean,JsNumber, JsArrayJsString),您將不得不定義自己的格式。

API摘自:

case class User(id: Long, name: String, friends: List[User]) 

implicit object UserFormat extends Format[User] { 
    def reads(json: JsValue): User = User(
    (json \ "id").as[Long], 
    (json \ "name").as[String], 
    (json \ "friends").asOpt[List[User]].getOrElse(List())) 
    def writes(u: User): JsValue = JsObject(List(
    "id" -> JsNumber(u.id), 
    "name" -> JsString(u.name), 
    "friends" -> JsArray(u.friends.map(fr => JsObject(List("id" -> JsNumber(fr.id), 
    "name" -> JsString(fr.name))))))) 
} 

//then in a controller: 
object MyController extends Controller { 
    def displayUserAsJson(id: String) = Action { 
     Ok(toJson(User(id.toLong, "myName", friends: List()))) 
    } 
    def saveUser(jsonString: String)= Action { 
    val user = play.api.libs.json.parse(jsonString).as[User] 
    myDataStore.save(user) 
    Ok 
    } 
} 

祝你好運!