假设:
implicit val formats = DefaultFormats
val json =
"""[
{"myType":"type1","things":["1","2","3","4","5","6"]},
{"myType":"type1","things":["1","2","3","4","5","6"]}
]"""
case class Stuff(myType: String, things: List[String])
parse(json).extract[List[Stuff]]
Scala在运行时产生此错误:
An exception or error caused a run to abort: Temp and Temp$$anonfun$1$Stuff$3 disagree on InnerClasses attribute
java.lang.IncompatibleClassChangeError: Temp and Temp$$anonfun$1$Stuff$3 disagree on InnerClasses attribute
是否有一种开箱即用的方法可以用json4s解析它,或者这是自定义序列化器的情况?
json4s版本是3.5.2
由于系统限制,scala版本较旧,2.10.4
答案 0 :(得分:1)
你在范围内有一个隐含的Formats
对象吗?
extract
方法需要隐式格式参数。 Json4s为Lists等提供了默认格式。
以下代码适用于我
import org.json4s.DefaultFormats
import org.json4s.native.JsonMethods.parse
implicit val formats = DefaultFormats
val json =
"""[
{"myType":"type1","things":["1","2","3","4","5","6"]},
{"myType":"type1","things":["1","2","3","4","5","6"]}
]"""
case class Stuff(myType: String, things: List[String])
parse(json).extract[List[Stuff]]
res0: List[Stuff] = List(Stuff(type1,List(1, 2, 3, 4, 5, 6)), Stuff(type1,List(1, 2, 3, 4, 5, 6)))
json4s版本3.2.11
scala版本2.11
如果你在范围内有一个隐式格式化程序,它可能是json4s Reflector中的一个错误。在不同的地方声明您的Stuff
案例类可能会解决问题。有关详细信息,请参阅此github问题https://github.com/json4s/json4s/issues/84