小编Caf*_*rog的帖子

将lift-json提取到具有上限的case类中

我花了最后一天搜索和阅读各种网站和文章,试图找到自己的问题的答案,我没有发现任何有用的东西.我甚至不确定这是否可行.我的问题是我试图使用lift-json解析并提取Json响应.响应由4部分组成,其中前3个部分对于我所做的每种类型的请求的每个响应总是相同的.最后一部分取决于请求的类型,但它总是一个类型的列表.我希望做这样的事情:

abstract class MyObjects
case class Apple(id: Int, name: String, color: String) extends MyObjects
case class Orange(id: Long, name: String, state: String) extends MyObjects

abstract class MyResponse
case class Fruits[T <: MyObjects](aisle: Int, bin: Int, hasWhat: Option[List[T]])
Run Code Online (Sandbox Code Playgroud)

如果我想知道所有的苹果是什么,我会提出要求,并回复一个苹果列表的回复.当我尝试提取此示例时:

myJson.extract[Fruits[Apple]]
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

net.liftweb.json.MappingException: do not know how to get type parameter from T
    at net.liftweb.json.Meta$.fail(Meta.scala:128)
    at net.liftweb.json.Meta$Reflection$.term$1(Meta.scala:206)
    at net.liftweb.json.Meta$Reflection$.typeParameters(Meta.scala:220)
    at net.liftweb.json.Meta$.mkContainer$1(Meta.scala:91)
    at net.liftweb.json.Meta$.fieldMapping$1(Meta.scala:101)
    at net.liftweb.json.Meta$.mkContainer$1(Meta.scala:90)
    at net.liftweb.json.Meta$.fieldMapping$1(Meta.scala:107)
    at net.liftweb.json.Meta$.toArg$1(Meta.scala:117)
    at net.liftweb.json.Meta$$anonfun$constructors$1$1$$anonfun$apply$1.apply(Meta.scala:83)
    at net.liftweb.json.Meta$$anonfun$constructors$1$1$$anonfun$apply$1.apply(Meta.scala:82)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:...
Run Code Online (Sandbox Code Playgroud)

我正在使用lift-json 2.1和scala 2.8.我确实有办法解决它,通过专门为每种类型的响应创建一个案例类,但我认为我想要做的更干净.只是想知道a)这是否可能?b)如果是这样,我做错了什么?

编辑...示例应用程序:

val apples = …
Run Code Online (Sandbox Code Playgroud)

json scala extract lift

6
推荐指数
1
解决办法
3915
查看次数

标签 统计

extract ×1

json ×1

lift ×1

scala ×1