Scala 当我的case类上有Option[Instant]属性时,我的JSON读取没有编译
如何为具有option Instant属性的类编写json读取Scala 当我的case类上有Option[Instant]属性时,我的JSON读取没有编译,scala,play-json,Scala,Play Json,如何为具有option Instant属性的类编写json读取 case class User(id: Int, joined: Option[Instant]) 我的IDE显示错误: 未找到参数的隐式:读取[Option[Instant]] 如果我删除该选项,那么即时操作就可以了 为什么它暂时不允许选项?在这种情况下,您不应该尝试解析选项[t],而是使用可读取的 import java.time.Instant case class User(id: Int, joined: Option
case class User(id: Int, joined: Option[Instant])
我的IDE显示错误:
未找到参数的隐式:读取[Option[Instant]]
如果我删除该选项,那么即时操作就可以了
为什么它暂时不允许选项?在这种情况下,您不应该尝试解析
选项[t]
,而是使用可读取的
import java.time.Instant
case class User(id: Int, joined: Option[Instant])
import play.api.libs.json._
import play.api.libs.functional.syntax._
implicit val userReads: Reads[User] = (
(__ \ "id").read[Int] and
(__ \ "joined").readNullable[Instant]
)(User.apply _)
此外,在这种情况下,使用提供的宏更容易:
import java.time.Instant
case class User(id: Int, joined: Option[Instant])
import play.api.libs.json._
implicit val userReads: Reads[User] = Json.reads[User]
如果您有时间,您能解释一下为什么选项[T]不起作用吗?一般来说,选项是一种特殊情况,因为它可以根据上下文以不同的方式编码(null,省略,…),并且它是为任何T:Reads
派生的。所以在JSON中,要使即时值无JSON必须包含什么?null或省略,请尝试
import java.time.Instant
case class User(id: Int, joined: Option[Instant])
import play.api.libs.json._
implicit val userReads: Reads[User] = Json.reads[User]