2012-05-26 2 views
4

저는 스칼라와 playframework를 처음 접했지만, 지금까지는 훌륭합니다. 데이터 목록을 json (또는 실제로 복잡한 구조)으로 변환하는 방법을 알아내는 데 문제가 있습니다. 이것은 실제 사례가 아니지만 여기에 내가하려고하는 것입니다. 데이터베이스에서 일부 데이터를 가져옵니다.Playframework 스칼라의 Json 목록

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으로 바꿔서 돌려 줄 수 있기를 바란다. 내가 통해 반복하고 나는 문제가 그 일을 데 실제로, 결과

http://www.playframework.org/documentation/2.0/ScalaJson

에 toJson를 호출하지만 필요가 같이이 문서에 따라, 그것은 보인다. 이것도 올바른 접근 방법입니까? 이 간단한 것을 만드는 몇 가지 스칼라 개념이 있습니까? 사례 클래스를 사용하는 몇 가지 예제를 보았지만 아직 그 개념에 대해 저의 머리를 감싸지 않았습니다.

정말 내가 개념

답변

3

으로 말한이

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

감사처럼 뭔가를하려고 생각,이 작업을 기대하지 않지만, 당신은 당신이해야 할 암시 적 쓰기를 소유하고 쓸 수 있습니다 즉, 그러나 당신은 또한 기존의 기록 기능에 의존 단지 List[Map[String, Any]]으로 데이터를 검색하고 그 위에 toJson을 적용 할 수 있습니다 작동하는 것 같다

val simple = { 
    get[Pk[Long]]("user.id") ~ 
    get[Long]("user.uid") map { 
     case id~uid => Map("id" -> id.get.toString, "uid" -> uid.toString) 
    } 
} 
val result:List[Map(String,String)] = DB.withConnection { implicit c => 
    SQL("select * from users").as(User.simple *) 
} 
+0

감사합니다. 널 (null) 열을 어떻게 처리합니까? 내가 나이에 추가한다고 가정 해 봅시다. 내가 실행하면 다음과 같이 실행됩니다 .Json은 null이되기를 원할 때 문자열 "None"으로 되돌아갑니다. 'val simple = { get [Pk [Long] ] {0} {id} ~ {[long]] ("age") map { case id ~ ("id"-> id.get.toString, "uid"-> uid.toString, "api_key"-> api_key.toString, "age"-> age.toString) } ' – dhrod5

+0

'을 입력하면지도에 '연령'입력란을 추가해야하는지 여부를 알 수 있습니다. 정답이 맞으면 받아들입니다. – iwalktheline

+0

나는 그것을 이해했다고 생각합니다. age.toString을 수행하는 대신 toJson (age)을 수행하면 해당 JsValue로 바뀝니다. – dhrod5