gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:09:58 26 4
gpt4 key购买 nike

我只有几个小时才能探索 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com