EASY VERSION
如果我让Gson将一些有效的json转换为MyMap,它可以轻松完成。
public class MyMap{
Map<Long,String> content;
}
MyMap myMap = gson.fromJson(json, new TypeToken<MyMap>() {}.getType());
HARD VERSION:
我该如何让Gson实现以下功能?
public class MyDS{
Map<Map.Entry<Long,String>,Map<Long,String>> content;
}
MyDS myDS = gson.fromJson(json, new TypeToken<MyDS>() {}.getType());
如果您确实需要,以下是JSON示例。
"content": {
"[1, dog]": {
"1": "max",
"2": "pi",
"3": "robot",
"4": "catcher",
"5": "reaper"
},
"[2, cat]": {
"6": "black",
"7": "white",
"8": "meow",
"9": "mice",
"10": "rat"
},
"[3, rabbit]": {
"16": "bunny",
"17": "ears",
"28": "burgerbun",
"39": "alice",
"50": "tweak"
}
}
更多笔记
为了保险起见,我尝试运行一个单元测试,只是试图用Gson读取json,然后我得到以下错误跟踪:
at sun.misc.Unsafe.allocateInstance(Native method)
java.lang.reflect.Method.invoke!(Native method)
com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48)
com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:223)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:207)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:186)
com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
com.google.gson.Gson.fromJson(Gson.java:861)
com.google.gson.Gson.fromJson(Gson.java:826)
com.google.gson.Gson.fromJson(Gson.java:775)
无论键的形式为"[3, rabbit]"
还是"{3, rabbit}"
,都不会影响其功能。