让我说我有一个
class FooCodecs[A : CodecJson] {
def ListCodec: CodecJson[List[A]] =
CodecJson.derived[IList](_.toList)(IList.fromList)
}
如何创建支持List
的任意嵌套数量List[List[List[A]]
的编解码器?
我已经尝试为List[T[_] : CodecJson]
提供编解码器,但很明显它错过了对A
的一些重要类型引用。
那么,我如何使其递归?
答案 0 :(得分:1)
如果有一个Codec for List,(它似乎是由traversableOnce实例提供)和一个A的编解码器,那么Lists和A的任何嵌套都可以工作。不需要明确的递归定义:
import argonaut._
import Argonaut._
val a = List(List(List(1,2,3),List(4,5,6))).asJson
a.toString.decodeOption[List[List[List[Int]]]]
答案 1 :(得分:0)
是的,正如@melps所写,这可以按预期工作。我的问题似乎是在任何提供的编解码器之前找不到implicit CodecJson[A]
。我不得不将编解码器移动到相应的伴随对象(或者我可以将Argonaut放在较低优先级的上下文中)。我不知道为什么首先找不到相同上下文中的编解码器。