斯卡拉矢量到案例类

时间:2016-03-30 03:13:57

标签: json scala vector playframework

我想将显示if ( $part =~ /^sd/ and $part =~ /[^0-9]$/ ) { print "\tBase: $part\n"; } 的结果查询映射到vector

达尔:

case class

服务:

def selectPerson = sql"select * from PERSON".as[(String,String)]

控制器:

def ListPerson: Future[Seq[(String,String)]] = { 
  db.run(GroupDealerDetailDal.selectPerson)
}

案例类:

def listPerson = Action.async { implicit request =>
  GroupDealerDetailService.ListPerson.map(result =>
    Ok(Json.toJson(result.toString)))
}

结果为case class Person(username: String, password: String) object Person { implicit val personFormat = Json.format[Person] }

如何将结果映射到Vector((prastyo,12345))

所以结果是case class Person

2 个答案:

答案 0 :(得分:1)

听起来你想要JSON输出,所以我怀疑内部应该是这样的(未经测试):

GroupDealerDetailService.ListPerson.map { people => Ok(
    Json.toJson(
        people map { case (username, password) =>
            Person(username, password)
        }
    )
)}

答案 1 :(得分:0)

如果您想将地图数据库结果发送到Json响应,则不需要额外的case class和转换。 您可以使用海岸到海岸的设计与Json编写组合器。

简单写入

val u: OWrites[(String, String)] = (
  (__ \ "username").write[String] and 
  (__ \ "password").write[String]
).tupled

将您的(String, String)映射到JsObject

u.writes("prastyo" -> "12345")

res17: play.api.libs.json.JsObject = {"username":"prastyo","password":"12345"}

使用Writes.traversableWrites

val s = Writes.seq(u)

您可以将Vector映射到JsArray

s.writes(Seq("prastyo" -> "12345"))
res16: play.api.libs.json.JsValue = [{"username":"prastyo","password":"12345"}]

完整的控制器:

def listPerson = Action.async {
  GroupDealerDetailService.ListPerson.map(s.writes).map(Ok(_))
}