我正在编写服务器,它在我的db上执行任何select查询并返回json。我已经完成了大部分任务,但我坚持将可空列解析为字符串。
val result = SQL("SELECT * FROM Table limit 5;")().map(_.asList.map({_.toString})).toList
val jsonResp = Json.toJson(result)如果列可以有空值字符串( 123 )而不是123,则会生成。我尝试过使用match,但是编写该命令失败了。也许你也有类似的问题,你知道如何应对这种反应吗?
编辑:I通过添加模式匹配取得了一些进展:
val result = SQL(query)()
.map(_.asList.map(
{
case Some(s) => s.toString
case None => ""
case v => v.toString
}
)).toList但我不确定这是不是解决这个问题的好办法。仍在等待想法
发布于 2014-10-22 23:51:40
Anorm支持可空列作为可选值。
在那里,返回行作为原始值的列表。最好使用解析器API来指示如何正确提取值。例如。
SQL("SELECT a, b, c ...").as(get[Option[String]]("a") ~ int("b") ~ str("c) map { case a ~ b ~ c => MyClass(a, b, c) }.*)将SQL结果作为MyClass列表返回,属性按顺序排列为Option[String]、Int和String。
Anorm文档还有很多其他的例子。
发布于 2014-10-22 22:49:27
最好将数据库中的可选条目映射到json中的可选字段;大多数scala库将适当地呈现一个具有选项类型的字段。同样奇怪的是,您希望将整数值呈现为用于json的字符串,因为对于整数来说,json有一个非常好的数字类型。
如果您确实希望以这种方式将Option[Int]转换为字符串,最明确的方法可能是o.map(_.toString).getOrElse("");因此,您可以编写_.asList.map{_.map{_.toString}.getOrElse("")}而不是模式匹配。我不太了解特定的SQL库,不足以知道结果是否是类型选项;如果值是Any类型的,那么您可能需要以现有的方式匹配选项和非选项。
https://stackoverflow.com/questions/26507977
复制相似问题