ドメインオブジェクトからJSONへのアンマーシャルがだるい
このページの説明を見ててあーダルいなと思いました。
import play.api.libs.json._ 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))))))) }
上記みたいなコードを毎回書くのだるい。
特にアンマーシャルはダルいので、下記みたいなコード書いてみた。
こう呼び出します。as("application/json")がダサいなあ。もっといい方法あれば教えて下さい。
case class User(id: Long, name: String, friends: List[User]) def sendJson() = Action { val peter = User(2, "peter", List()) Ok(toJson(peter)).as("application/json") }
マーシャルは、まあまた今度考えよ。。
追記
totoshiさんがlift-jsonを使ってもっとイージーに書けるようにしてくれました。
あざーす。
http://d.hatena.ne.jp/tototoshi/20120526/1338032893