2013-07-16 5 views
15

스칼라 개체 목록을 Play2의 JSON 맵에 deserialize하려고합니다. JSON의 사용법은 매우 간단합니다.스칼라 목록을 Play2의 JSON에 직렬화

{ 
    "users": [ 
     { 
      "name": "Example 1", 
      "age": 20 
     }, 
     { 
      "name": "Example 2", 
      "age": 42 
     } 
    ] 
} 

내가 는 "재생 JSON 라이브러리"라는 제목의와 마찬가지로 play2의 JSON 문서에서 찾고이를 달성하기 : 내 JSON 출력의 라인을 따라 뭔가 될 것입니다. 나에게 그들의 예는 꽤 사소한 것이고 나는 그들이 나를 위해 일하는 것을 확인했다. 따라서 하나의 User 개체를 제대로 deserialize 할 수 있습니다.

하지만 JSON에서 목록이 포함 된지도를 만드는 것은 Play2에서 약간 자세한 설명이 될 것입니다. 설명서를 읽을 때입니다. 내가 grokking하지 않는 것이 있습니까?

이것은 기본적으로 내 간단한 스칼라 코드 :

case class User(name: String, age: Int) 

object UserList { 
    implicit val userFormat = Json.format[User] 

    val userList = List(User("Example 1", 20), User("Example 2", 42)) 
    val oneUser = Json.toJson(userList(0)) // Deserialize one Scala object properly to JSON. 
    // JSON: { "user" : [ <-- put content of userList here. How? 
    //     ] 
    //  } 
} 

그래서 제 질문이 될 것이다; Play 설명서에서 제시 한대로 각 해시 요소를 명시 적으로 작성하는 것보다 더 일반적인 방법으로 위의 userList 목록의 콘텐츠를 JSON의 해시로 변환하려면 어떻게해야합니까?

+0

비 직렬화 대신 직렬화하지 않습니까? 개체를 JSON으로 변환하려고하지 않습니까? – Renan

+0

고마워 - 고정 :) –

답변

36
scala> import play.api.libs.json._ 
import play.api.libs.json._ 

scala> case class User(name: String, age: Int) 
defined class User 

scala> implicit val userFormat = Json.format[User] 
userFormat: play.api.libs.json.OFormat[User] = [email protected] 

scala> val userList = List(User("Example 1", 20), User("Example 2", 42)) 
userList: List[User] = List(User(Example 1,20), User(Example 2,42)) 

scala> val users = Json.obj("users" -> userList) 
users: play.api.libs.json.JsObject = {"users":[{"name":"Example 1","age":20},{"name":"Example 2","age":42}]} 
+0

아 와우 - 그건 간단했다! 나는 문서를 다시 읽어야한다. 왜 이것이 더 명확하게 전달되지 않았는지 궁금하다 - 또는 나는 그것을 놓쳤다. 감사!! –

+2

www.playframework.com에서 Play의 JSON 지원에 관한 문서를 읽는 것만으로도 내가 원하는 것을 얻을 수있는 방법과 붙여 넣은 것을 얻지 못했을 것입니다. 문서는 꽤 쓰레기 같다. –

+1

@JohanPaul 예, 어느 시점에서 메서드 서명을보고 소스 코드를 읽어야합니다 (이 특별한 경우에는 'Writes' typeclass 인스턴스가 Play에 의해 이미 정의되어 있는지 확인해야합니다). –

관련 문제