【发布时间】:2019-09-26 02:11:55
【问题描述】:
当字段可以具有不同的原始值类型时,我遇到了 json 解析问题。比如我可以得到json:
{
"name" : "john",
"age" : 31
}
也可以是这样的形式:
{
"name" : "john",
"age" : "thirty one"
}
或者这样:
{
"name" : "john",
"age" : 31.0
}
我希望能够将字段 age 解析为以下 ADT 实例:
sealed trait PrimitiveWrapper
case class IntWrapper(v: Int) extends PrimitiveWrapper
case class StringWrapper(v: String) extends PrimitiveWrapper
case class FloatWrapper(v: Float) extends PrimitiveWrapper
所以最后我可以得到这样的东西:
case class Person(name: String, age: PrimitiveWrapper)
我该怎么做?我找到了这个话题:How to decode an ADT with circe without disambiguating objects
但在那个解决方案中,我们解析的不是原始字段。
【问题讨论】: