是否可以覆盖play.api.libs.json写入选项的方式?

西蒙

我与Play合作!Scala 2.4,我有几个像这样的简单案例类:

case class A(a: Option[String]) 

当该选项为空时,我想重写Json.toJson(A)的工作方式。

这是我所做的:

implicit val aWrites: Writes[A] = Json.writes[A]

implicit def ow[T](implicit w: Writes[T]): Writes[Option[T]] = Writes {
  case None => JsString("[]")
  case Some(t) => Json.toJson(t)
}

Json.toJson(A(a = None)) mustBe Json.parse("""{"a":"[]"}""")

但是它仍然像往常一样解析类(即{}不是{"a":"[]"}我想要的那样)。
我要怎么做才能通过测试?

迈克尔·扎亚克(Michael Zajac)

使用Json.writes是不可能的,因为它是专门Option为use编写的readNullable[B]这意味着您将需要使用组合器进行定义Writes[A]不幸的是,Writes为一个只有一个字段的对象定义要比拥有一个字段的对象麻烦得多。

implicit val aWrites: Writes[A] = Writes(a => Json.obj("a" -> a.a))

scala> Json.toJson(A(None))
res8: play.api.libs.json.JsValue = {"a":"[]"}

具有多个字段的示例:

import play.api.libs.functional.syntax._
import play.api.libs.json._

case class A(a: Option[String], b: Int)

implicit val aWrites: Writes[A] = (
    (__ \ "a").write[Option[String]] and
    (__ \ "b").write[Int]
)(unlift(A.unapply))

scala> Json.toJson(A(None, 10))
res0: play.api.libs.json.JsValue = {"a":"[]","b":10}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ScalaJson隐式写入,找到:任何必需的:play.api.libs.json.Json.JsValueWrapper

来自分类Dev

检查play.api.libs.json.Json中是否存在密钥

来自分类Dev

使用play.api.libs.ws批处理请求

来自分类Dev

没有 play.api.libs.json.Format 实例可用于 scala.Iterable[java.lang.String]

来自分类Dev

为什么play.libs.Json.toJson返回一个空对象?

来自分类Dev

是否可以通过全屏覆盖来自 api 的图像?

来自分类Dev

如何创建并完成play.libs.F.Promise?

来自分类Dev

如何创建并完成play.libs.F.Promise?

来自分类Dev

是否可以覆盖单个默认Windows键盘快捷方式?

来自分类Dev

检查是否安装了ia32-libs

来自分类Dev

是否可以隐藏aar中“ libs”文件夹中的依赖项?

来自分类Dev

Play JSON组合器写入的覆盖值

来自分类Dev

是否可以在网络API路由中使用.json?

来自分类Dev

Foxx / ArangoDB:是否可以创建符合JSON API规范的响应?

来自分类Dev

是否可以通过右键单击方式在SSMS中插入选择,还是可以调整菜单?

来自分类Dev

是否可以通过REST API导入Google Play控制台安装报告?

来自分类Dev

是否可以共享 SublimeText 首选项*和*覆盖一个特定的首选项?

来自分类Dev

eBay API令牌可以检测用户是否已经重新授权,是否可以通过任何方式解码eBay令牌?

来自分类Dev

是否有任何工具可以通过JSON或Open API自动创建类似Wiki的REST API文档?

来自分类Dev

是否有任何选项可以在远程服务器中启用或禁用 php FTP 覆盖。?

来自分类Dev

Gradle依赖项是否比将jar下载到libs更加安全?

来自分类Dev

spring-xd中是否有API可以写入消息总线?

来自分类Dev

是否可以从Android API对Google云端硬盘文件进行随机访问写入?

来自分类Dev

是否有任何现有的API可以从JAVA读取和写入HDFS

来自分类Dev

是否可以使用Table API选项在docker-compose内部运行Comos DB

来自分类Dev

Linux API:是否可以为单个“ write”系统调用指定“ O_SYNC”选项

来自分类Dev

Wagtail / Django:是否可以从API结果中填充给定的管理字段选项?

来自分类Dev

是否可以通过编程方式自定义LabVIEW虚拟仪器的API?

来自分类Dev

是否有某种API或工具可以通过编程方式浏览Google Maps?

Related 相关文章

  1. 1

    ScalaJson隐式写入,找到:任何必需的:play.api.libs.json.Json.JsValueWrapper

  2. 2

    检查play.api.libs.json.Json中是否存在密钥

  3. 3

    使用play.api.libs.ws批处理请求

  4. 4

    没有 play.api.libs.json.Format 实例可用于 scala.Iterable[java.lang.String]

  5. 5

    为什么play.libs.Json.toJson返回一个空对象?

  6. 6

    是否可以通过全屏覆盖来自 api 的图像?

  7. 7

    如何创建并完成play.libs.F.Promise?

  8. 8

    如何创建并完成play.libs.F.Promise?

  9. 9

    是否可以覆盖单个默认Windows键盘快捷方式?

  10. 10

    检查是否安装了ia32-libs

  11. 11

    是否可以隐藏aar中“ libs”文件夹中的依赖项?

  12. 12

    Play JSON组合器写入的覆盖值

  13. 13

    是否可以在网络API路由中使用.json?

  14. 14

    Foxx / ArangoDB:是否可以创建符合JSON API规范的响应?

  15. 15

    是否可以通过右键单击方式在SSMS中插入选择,还是可以调整菜单?

  16. 16

    是否可以通过REST API导入Google Play控制台安装报告?

  17. 17

    是否可以共享 SublimeText 首选项*和*覆盖一个特定的首选项?

  18. 18

    eBay API令牌可以检测用户是否已经重新授权,是否可以通过任何方式解码eBay令牌?

  19. 19

    是否有任何工具可以通过JSON或Open API自动创建类似Wiki的REST API文档?

  20. 20

    是否有任何选项可以在远程服务器中启用或禁用 php FTP 覆盖。?

  21. 21

    Gradle依赖项是否比将jar下载到libs更加安全?

  22. 22

    spring-xd中是否有API可以写入消息总线?

  23. 23

    是否可以从Android API对Google云端硬盘文件进行随机访问写入?

  24. 24

    是否有任何现有的API可以从JAVA读取和写入HDFS

  25. 25

    是否可以使用Table API选项在docker-compose内部运行Comos DB

  26. 26

    Linux API:是否可以为单个“ write”系统调用指定“ O_SYNC”选项

  27. 27

    Wagtail / Django:是否可以从API结果中填充给定的管理字段选项?

  28. 28

    是否可以通过编程方式自定义LabVIEW虚拟仪器的API?

  29. 29

    是否有某种API或工具可以通过编程方式浏览Google Maps?

热门标签

归档