首页
学习
活动
专区
圈层
工具
发布

Anorm空值
EN

Stack Overflow用户
提问于 2014-10-22 12:56:44
回答 2查看 819关注 0票数 0

我正在编写服务器,它在我的db上执行任何select查询并返回json。我已经完成了大部分任务,但我坚持将可空列解析为字符串。

代码语言:javascript
复制
val result = SQL("SELECT * FROM Table limit 5;")().map(_.asList.map({_.toString})).toList
val jsonResp = Json.toJson(result)

如果列可以有空值字符串( 123 )而不是123,则会生成。我尝试过使用match,但是编写该命令失败了。也许你也有类似的问题,你知道如何应对这种反应吗?

编辑:I通过添加模式匹配取得了一些进展:

代码语言:javascript
复制
    val result = SQL(query)()
      .map(_.asList.map(
    {
      case Some(s) => s.toString
      case None => ""
      case v => v.toString
    }
    )).toList

但我不确定这是不是解决这个问题的好办法。仍在等待想法

EN

回答 2

Stack Overflow用户

发布于 2014-10-22 23:51:40

Anorm支持可空列作为可选值。

在那里,返回行作为原始值的列表。最好使用解析器API来指示如何正确提取值。例如。

代码语言:javascript
复制
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]IntString

Anorm文档还有很多其他的例子。

票数 1
EN

Stack Overflow用户

发布于 2014-10-22 22:49:27

最好将数据库中的可选条目映射到json中的可选字段;大多数scala库将适当地呈现一个具有选项类型的字段。同样奇怪的是,您希望将整数值呈现为用于json的字符串,因为对于整数来说,json有一个非常好的数字类型。

如果您确实希望以这种方式将Option[Int]转换为字符串,最明确的方法可能是o.map(_.toString).getOrElse("");因此,您可以编写_.asList.map{_.map{_.toString}.getOrElse("")}而不是模式匹配。我不太了解特定的SQL库,不足以知道结果是否是类型选项;如果值是Any类型的,那么您可能需要以现有的方式匹配选项和非选项。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26507977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档