下面是JSON:
[{"type": "first_variant", ...}, {"type": "second_variant", ...}]
字符串我想把这个JSON解析成一个Variant枚举数组,如下所示:
Variant
enum Variant: case FirstVariant(...) case SecondVariant(...)
型如何使用circe?
circe
sg3maiej1#
在Scala 3和Circe 0.14.6中,您可以通过提供适当的Configuration和Codec来要求snake大小写中的一个字段:
Configuration
Codec
//> using lib io.circe::circe-core:0.14.6 //> using lib io.circe::circe-generic:0.14.6 import io.circe.Codec import io.circe.syntax.EncoderOps import io.circe.derivation.Configuration import io.circe.generic.auto.given enum Variant: case FirstVariant(x: Int) case SecondVariant(y: String) given Configuration = Configuration .default .withDiscriminator("type") .withSnakeCaseConstructorNames given Codec[Variant] = Codec.AsObject.derivedConfigured @main def example = val l = List( Variant.FirstVariant(1), Variant.SecondVariant("hello") ) val lJson = l.asJson println(lJson) val l2 = lJson.as[List[Variant]].toOption.get assert(l2 == l)
字符串这将产生:
[ { "x" : 1, "type" : "first_variant" }, { "y" : "hello", "type" : "second_variant" } ]
型参考文献:我从(过时的)Circle关于ADT的文档the answer to a similar question for Circe 0.7.0和Circe 0.14.6(Configuration.scala和ConfiguredDerivesSuite.scala)的源代码中导出了这个例子。
Configuration.scala
ConfiguredDerivesSuite.scala
1条答案
按热度按时间sg3maiej1#
在Scala 3和Circe 0.14.6中,您可以通过提供适当的
Configuration
和Codec
来要求snake大小写中的一个字段:字符串
这将产生:
型
参考文献:我从(过时的)Circle关于ADT的文档the answer to a similar question for Circe 0.7.0和Circe 0.14.6(
Configuration.scala
和ConfiguredDerivesSuite.scala
)的源代码中导出了这个例子。