Json 带Scala的GSON-无法为Scala.collection.immutable.Map调用无参数构造函数
下面是一个示例Scala对象,我想在其中将JSON字符串反序列化为Json 带Scala的GSON-无法为Scala.collection.immutable.Map调用无参数构造函数,json,scala,deserialization,gson,Json,Scala,Deserialization,Gson,下面是一个示例Scala对象,我想在其中将JSON字符串反序列化为字符串映射->字符串。我使用GSON 2.2.2和Scala 2.10 import com.google.gson.Gson import com.google.gson.reflect.TypeToken object MyTest { def main(args: Array[String]) { val gson = new Gson val jsonString = "{\"test1\": \"v
字符串映射->字符串
。我使用GSON 2.2.2和Scala 2.10
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
object MyTest {
def main(args: Array[String]) {
val gson = new Gson
val jsonString = "{\"test1\": \"value-test1\",\"test2\":\"value-test2\"}"
val mapType = new TypeToken[Map[String, String]] {}.getType
val map = gson.fromJson(jsonString, mapType).asInstanceOf[Map[String, String]]
}
}
这是在val-map=…
行中抛出的堆栈跟踪:
Exception in thread "main" java.lang.RuntimeException: Unable to invoke no-args
constructor for
scala.collection.immutable.Map<java.lang.String, java.lang.String>.
Register an InstanceCreator with Gson for this type may fix this problem.
at com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:167)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:162)
at com.google.gson.Gson.fromJson(Gson.java:795)
at com.google.gson.Gson.fromJson(Gson.java:761)
at com.google.gson.Gson.fromJson(Gson.java:710)
at MyTest$.main(MyTest.scala:9)
at MyTest.main(MyTest.scala)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48)
at com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:164)
... 6 more
Caused by: java.lang.InstantiationException: scala.collection.immutable.Map
at sun.misc.Unsafe.allocateInstance(Native Method)
... 12 more
线程“main”java.lang.RuntimeException中的异常:无法调用任何参数
建造师
scala.collection.immutable.Map。
为此类型向Gson注册InstanceCreator可能会解决此问题。
位于com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:167)
位于com.google.gson.internal.bind.ReflectTypeAdapterFactory$Adapter.read(ReflectTypeAdapterFactory.java:162)
位于com.google.gson.gson.fromJson(gson.java:795)
位于com.google.gson.gson.fromJson(gson.java:761)
位于com.google.gson.gson.fromJson(gson.java:710)
在MyTest$.main中(MyTest.scala:9)
在MyTest.main(MyTest.scala)上
原因:java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48)
位于com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:164)
... 还有6个
原因:java.lang.InstanceException:scala.collection.immutable.Map
at sun.misc.Unsafe.allocateInstance(本机方法)
... 还有12个
那么这里出了什么问题呢?哦,这是因为
Map
没有无参数的构造函数,我可以切换到scala.collection.immutable.HashMap
,然后错误不会出现,但是Map
没有值,它是完全空的。它只是一个HashMap
,带有serialVerionUID
,没有更多字段