2

可以说我有一个

class FooCodecs[A : CodecJson] { 

  def ListCodec: CodecJson[List[A]] = 
    CodecJson.derived[IList](_.toList)(IList.fromList)
}

如何创建支持任意嵌套数量Listlike的编解码器List[List[List[A]]

我尝试为 提供编解码器List[T[_] : CodecJson],但很明显它遗漏了一些对A.

那么,如何让它递归呢?

4

2 回答 2

1

如果有 List 的编解码器(并且它似乎是由 traversableOnce 实例提供的)和 A 的编解码器,那么 List 和 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]]]]
于 2015-10-14T09:30:28.323 回答
0

是的,正如@melps 所写,这按预期工作。我的问题似乎是implicit CodecJson[A]在提供的任何编解码器之前都没有找到。我不得不将编解码器移动到相应的伴随对象(或者我可以将 Argonaut 放在较低优先级的上下文中)。我不知道为什么没有首先找到相同上下文中的编解码器。

于 2015-10-14T14:22:01.283 回答