2013-07-16 6 views
15

Я пытаюсь десериализовать список объектов Scala на карте JSON в Play2 - довольно простой пример использования JSON, я бы сказал. Мой выход JSON будет что-то вдоль линий:Сериализация списка Scala для JSON в Play2

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

Для достижения этой цели я смотрю на JSON документации PLAY2, озаглавленном «Игра JSON библиотека». Для меня их примеры довольно тривиальны, и я подтвердил, что они работают для меня. Следовательно, я могу десериализовать один объект User должным образом.

Но создание карты, содержащей список в JSON, кажется немного подробным в Play2, когда я прочитал документацию. Есть ли что-то, чего я не грохочу?

Это в основном мой простой Scala код:

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? 
    //     ] 
    //  } 
} 

Так что мой вопрос будет; как я могу преобразовать содержимое списка userList выше в хэш в JSON более общим образом, чем явно выписывать каждый элемент хэша, как предлагает документация Play?

+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 о поддержке JSON Play, я бы никогда не придумал, как добиться того, чего я хотел, и того, что вы вставили. Документы кажутся довольно мусорными. –

+1

@JohanPaul Да, в какой-то момент вам нужно посмотреть на сигнатуры метода и прочитать исходный код (чтобы увидеть, какие экземпляры класса «Writes» уже определены в Play в данном конкретном случае). –

Смежные вопросы