gpt4 book ai didi

json - 带有 Play 2.2 库的密封特征的无噪声 JSON 格式

转载 作者:IT老高 更新时间:2023-10-28 12:46:20 26 4
gpt4 key购买 nike

我需要一个简单的 JSON 序列化解决方案,仪式最少。所以我很高兴找到 this forthcoming Play 2.2 library .这与普通案例类完美配合,例如

import play.api.libs.json._

sealed trait Foo
case class Bar(i: Int) extends Foo
case class Baz(f: Float) extends Foo

implicit val barFmt = Json.format[Bar]
implicit val bazFmt = Json.format[Baz]

但以下失败:

implicit val fooFmt = Json.format[Foo]   // "No unapply function found"

我将如何为 Foo 设置所谓的缺失提取器?

或者您会推荐任何其他或多或少完全自动处理我的案例的独立库吗?我不在乎是在编译时使用宏还是在运行时使用反射,只要它开箱即用即可。

最佳答案

于 2015 年 9 月 22 日修订

图书馆play-json-extra包括 play-json-variants策略,还有 [play-json-extensions] 策略(案例对象的扁平字符串与案例类的对象混合,除非需要,否则没有额外的 $variant 或 $type)。它还为 macramé 提供序列化器和反序列化器。基于枚举。

上一个答案现在有一个名为 play-json-variants 的库它允许你写:

implicit val format: Format[Foo] = Variants.format[Foo]

这将自动生成相应的格式,它还将通过添加 $variant 属性(相当于 0__ 的 class 属性)来处理以下情况的消歧

sealed trait Foo
case class Bar(x: Int) extends Foo
case class Baz(s: String) extends Foo
case class Bah(s: String) extends Foo

会生成

val bahJson = Json.obj("s" -> "hello", "$variant" -> "Bah") // This is a `Bah`
val bazJson = Json.obj("s" -> "bye", "$variant" -> "Baz") // This is a `Baz`
val barJson = Json.obj("x" -> "42", "$variant" -> "Bar") // And this is a `Bar`

关于json - 带有 Play 2.2 库的密封特征的无噪声 JSON 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17021847/

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