我试图使用Shapeless 来解决这个问题,总结一下,它是关于将嵌套的case类转换为Map [String,Any],这是示例:
case class Person(name:String, address:Address)
case class Address(street:String, zip:Int)
val p = Person("Tom", Address("Jefferson st", 10000))
Run Code Online (Sandbox Code Playgroud)
它想转换p为以下内容:
Map("name" -> "Tom", "address" -> Map("street" -> "Jefferson st", "zip" -> 10000))
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Shapeless LabelledGeneric,这是我迄今为止所做的:
import shapeless._
import record._, syntax.singleton._
import ops.record._
import shapeless.ops.record._
def writer[T,A<:HList,H<:HList](t:T)
(implicit lGeneric:LabelledGeneric.Aux[T,A],
kys:Keys.Aux[A,H],
vls:Values[A]) = {
val tGen = lGeneric.to(t)
val keys = Keys[lGeneric.Repr].apply
val values = Values[lGeneric.Repr].apply(tGen)
println(keys)
println(values)
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用递归编写器来检查每个值,并尝试为值中的每个元素创建Map.上面的代码工作正常但是当我想要values使用以下代码迭代时,我得到了这些错误.
values.map(identity)
//or
tGen.map(identity)
Error:(75, 19) could not …Run Code Online (Sandbox Code Playgroud)