gpt4 book ai didi

json - ( Play 2.5) Option 的类型别名如何定义json 格式?

转载 作者:行者123 更新时间:2023-12-01 13:46:24 25 4
gpt4 key购买 nike

case class ClassA(myObjectType: TypeA.myTypeAlias)

object ClassA {

implicit def jsonFormat: Format[ClassA] = Json.format[ClassA]

}

object TypeA {

type myTypeAlias = Option[String]
}

我收到编译错误 No implicit format for typeA.myObjectType available.

如何定义 JSON 格式?

最佳答案

此错误来自 play.api.libs.json.JsMacroImpl.scala (line 164 in Play 2.5.0-RC2) 中的自动隐式生成宏.

此代码在分析类型之前不会对类型进行处理,因此它甚至无法推断出 TypeA.myTypeAlias是一个 Option .

您可以做的一件事是指定一个隐式的 Format[myTypeAlias] :

object ClassA {
implicit val myTypeAliasFormat: Format[TypeA.myTypeAlias] = Format.optionWithNull
implicit def jsonFormat: Format[ClassA] = Json.format[ClassA]
}

object TypeA {
type myTypeAlias = Option[String]
implicit val myTypeAliasFormat: Format[myTypeAlias] = Format.optionWithNull
}

object ClassA {
import TypeA.myTypeAliasFormat
implicit def jsonFormat: Format[ClassA] = Json.format[ClassA]
}

请注意,它将转换 JSON nullNone ,如果路径丢失则产生错误,并序列化 None作为 JSON null .

我相信,不可能实现将缺失路径解释为 None 的行为, 并跳过序列化 None ,当使用类型别名和自动隐式生成时 Json.format .您必须手动编写一个 JSON Format如果你想要那种行为。

关于json - ( Play 2.5) Option 的类型别名如何定义json 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35741245/

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