Java 哈希映射的Gson序列化
我有一个需要序列化的hashmap(MapJava 哈希映射的Gson序列化,java,serialization,gson,Java,Serialization,Gson,我有一个需要序列化的hashmap(Map),目前只处理字符串。 当前使用gson对其进行序列化 {cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58={tz:“eeee”dis:“aaaa”geoAddr:“cccc,dddd”id:@cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58地质状态:“dddd”区域:1000平方英尺地质城市:“cccc”BBBBBB} 但似乎通过添加中间键值对和如下所示的哈希代码来改变整体结构 {“cb9b4b3d-8d
Gson gson = new Gson();
Type listType = new TypeToken<Map<String, Map>>()
{
}.getType();
map = gson.fromJson(string, listType);
Gson-Gson=new-Gson();
类型listType=新类型令牌()
{
}.getType();
map=gson.fromJson(字符串,listType);
{cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58={map={tz={val=eeee},dis={val=aaaa},geoAddr={val=cccc,dddddd},id={val=cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58},geoState={val=ddddd},area={val=1000.0,unit=ft²},geoCity={val=cccc},bbbb,hashCode=0}
是否有一种方法可以将文件反序列化为与最初相同的结构。我使用的第三方库不理解此反序列化映射。这对我有用(gson 2.8):
您使用的是什么版本的gson?我用2.8测试了这个,它用原语值序列化了映射。你序列化的是什么
map
类?我也用2.8,序列化/反序列化都很有效。但是反序列化的映射看起来与我最初拥有的不同,如问题中所述。它是一个映射具体实现是什么(即它是一个HashMap
还是其他什么)?当我使用HashMap
进行测试时,我没有看到这种行为。谢谢你的建议。我尝试过,但结果相同。关于hashmap中对象的类型,我不正确。在我的例子中,它确实是抽象类的许多具体实现之一。
Gson gson = new Gson();
Type listType = new TypeToken<Map<String, Map>>()
{
}.getType();
map = gson.fromJson(string, listType);
public static void main(String[] args) {
String json = "{"
+ " \"cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58\": {"
+ " \"tz\": \"eeee\","
+ " \"dis\": \"aaaa\","
+ " \"geoAddr\": \"cccc\","
+ " \"id\": \"cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58\","
+ " \"geoState\": \"dddd\","
+ " \"area\": 1000,"
+ " \"geoCity\": \"cccc\""
+ " }"
+ "}";
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Map<String, Map<String, Object>> map = gson.fromJson(json, new TypeToken<Map<String, Map<String, Object>>>(){}.getType());
System.out.println("Map.toString() is:");
System.out.println(map);
String serialisedMap = gson.toJson(map);
System.out.println("Map to json is:");
System.out.println(serialisedMap);
}
Map.toString() is:
{cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58={tz=eeee, dis=aaaa, geoAddr=cccc, id=cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58, geoState=dddd, area=1000.0, geoCity=cccc}}
Map to json is:
{
"cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58": {
"tz": "eeee",
"dis": "aaaa",
"geoAddr": "cccc",
"id": "cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58",
"geoState": "dddd",
"area": 1000.0,
"geoCity": "cccc"
}
}