json - 如果您有 Reads[T] 和 Writes [T],那么 Format[T] 的目的是什么?

标签 json scala playframework-2.0

我只有几个小时才能探索 Play Framework (2.5.1)我很困惑你为什么要创建 Format当你已经定义了ReadsWrites .通过定义 ReadsWrites对于您的类(class),您是否没有定义将类(class)与JsValue 相互转换所需的所有功能? ?

最佳答案

正如 play-framework 文档中提到的 here

Format[T] is just a mix of the Reads and Writes traits and can be used for implicit conversion in place of its components.

Format 是 Reads[T] 和 Writes[T] 的组合。因此,您可以为类型 T 定义一个隐式 Format[T] 并使用它来读取和写入 Json,而不是为类型 T 定义单独的隐式 Reads[T] 和 Writes[T]。因此,如果您已经有 Reads[T]并为您的类型 T 定义 Writes[T],然后不需要 Format[T],反之亦然。

Format 的一个优点是您可以为您的类型 T 定义一个 Implicit Format[T],而不是定义两个单独的 Reads[T] 和 Writes[T],如果它们都是对称的(即 Reads 和 Writes)。因此 Format 使您的 JSON Structure 定义的重复性降低。例如你可以做这样的事情

implicit val formater: Format[Data] = (
    (__ \ "id").format[Int] and
    (__ \ "name").format[String] and
    (__ \ "value").format[String]
  ) (Data.apply, unlift(Data.unapply))

而不是这个。

implicit val dataWriter: Writes[Data] = (
    (__ \ "id").write[Int] and
    (__ \ "name").write[String] and
    (__ \ "file_type").write[String]
  ) (Data.apply)

implicit val dataWriter: Reads[Data] = (
    (__ \ "id").read[Int] and
    (__ \ "name").read[String] and
    (__ \ "file_type").read[String]
  ) (unlift(Data.unapply))

关于json - 如果您有 Reads[T] 和 Writes [T],那么 Format[T] 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402640/

相关文章:

mysql - NSARRAY JSON 空

PHP-fputcsv : put JSON values retrieved from MySQL field in separate columns

scala - 如何使用 Spark DataFrames 和 Cassandra 设置命名策略

scala - 从 Spark DataFrame 中删除嵌套列

java - 尝试保存凭据时,使用 Google Drive API 库和 Play with Java 会卡住/锁定应用程序

java - 在 Scala 中 Play 临时文件到 blob 字节缓冲区

java - 使用 Jackson 处理器 spring mvc 3.1 的空指针异常

javascript - JSON 和 javascript 对象

println 中的 Scala 字符串插值 - 使用点表示法访问元素

java - 如何在 playframework Java 上将 List<Object> 转换为 JSON