-5

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)

これがコンパイルされないのはなぜですか?

4

1 に答える 1

3

APIとプレイ中の例をぜひご覧ください!ウェブサイト。JSON に関する包括的なガイドを提供します。play.api.libs.jsonパッケージには 7 つの JSON データ型 ( JsObjectJsNullJsUndefinedJsBoolean、および) しか含まれていないため、独自の形式を定義する必要がありますJsNumberJsArrayJsString

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
   }
}

幸運を!

于 2012-10-31T09:07:42.467 に答える