ZIO Json:在 JSON 中列出的失败光纤



我有一些数据结构,我正在尝试从JSON中解脱出来。简短版本(或此处的完整版本):

sealed trait CexPair:
val timestamp: String
// ... (cut for brevity)
implicit val decoderCexPair: JsonDecoder[CexPair] = DeriveJsonDecoder.gen
case class CexPairWithBidAsk(
timestamp: String,
// snip
bid: Double,
ask: Double
) extends CexPair
implicit val decoderWithBidAsk: JsonDecoder[CexPairWithBidAsk] = DeriveJsonDecoder.gen
case class CexPairWithoutBidAsk(
timestamp: String,
// snip
) extends CexPair
implicit val decoderWithoutBidAsk: JsonDecoder[CexPairWithoutBidAsk] = DeriveJsonDecoder.gen
case class Tickers(data: Seq[CexPair])
implicit val decoderTickers: JsonDecoder[Tickers] = DeriveJsonDecoder.gen
implicit val decoderPairs: JsonDecoder[Seq[CexPair]] =
decoderTickers.map(_.data)

但是当我尝试运行它时,我得到:

Assertion failed:
Fiber failed.
A checked error was not handled.
.data(expected '{' got '[')

这告诉我,反序列化Tickers已经变得混乱了。这是因为sealed trait不是解组 JSON 的理想基础,还是我错过了完全不同的东西?

对于尝试解析tickers <- ZIO.fromEither(str.fromJson[Tickers])的测试用例,他自定义JsonDecoderdecodePairs期望Tickersdata字段也被解析为Tickers(在Seq中映射之前)而不是List\Seq因此它期望{而不是[

只需删除decoderPairs,它将回退到默认解码器进行Seq,如果没有其他问题,希望它应该解析正常。

最新更新