Я новичок в scala и в playframework, но пока это здорово. Мне трудно понять, как превратить список данных в json (или действительно любую сложную структуру). Это не реальный пример, но вот что я пытаюсь сделать. Получите некоторые данные из базы данных.Список Json в Playframework Scala
scala> val result:List[(Long,String)] = DB.withConnection { implicit c =>
SQL("select * from users").as(
long("id")~str("uid") map(flatten)*)
}
result: List[(Long, String)] = List((3,397a73ee5150429786863db144341bb3), (4,2850760dc9024c16bea6c8c65f409821), (5,636ee2bf758e4f699f27890ac55d7db2))
Я хотел бы иметь возможность затем превратить это в json и вернуть его. на основе этого док, это выглядит как мне нужно перебирать и вызвать toJson на результат
http://www.playframework.org/documentation/2.0/ScalaJson
Но, на практике у меня возникают проблемы, делая это. Это даже правильный подход? Есть ли какая-то концепция scala, которая сделает это простым? Я вижу несколько примеров, использующих классы case, но я пока не совсем обволакивал эту концепцию.
Я не ожидаю, что это работает, но, я думаю, я концептуально пытается сделать что-то вроде этого
scala> toJson(Map("response" -> result))
<console>:27: error: No Json deserializer found for type scala.collection.immutable.Map[java.lang.String,List[(Long, String)]]. Try to implement an implicit Writes or Format for this type.
toJson(Map("response" -> result))
Благодаря
Спасибо, что, кажется, работает. Как вы работаете с нулевыми столбцами? Скажем, я добавляю возраст, если я это делаю, тогда, когда я забегу в Json, он вернется как строка «Нет», когда я хочу, чтобы он был нулевым. 'val simple = { get [Pk [Long] ] ("users.id") ~ get [String] ("users.uid") ~ get [Long] ("apiKey_id") ~ get [Option [Long]] ("age") map { case id ~ uid ~ api_key ~ age => Карта ("id" -> id.get.toString, "uid" -> uid.toString, "api_key" -> api_key.toString, "age" -> age.toString) }} ' – dhrod5
используйте случай соответствия, чтобы узнать, нужно ли добавить поле« возраст »на карту. Если ответ одобрен для вас, отметьте его принятым. – iwalktheline
Я думаю, что понял. вместо того, чтобы делать age.toString, вы можете сделать toJson (возраст), и он превратит его в соответствующий JsValue. – dhrod5