Map的存储结构式Key/Value形式,Key 和 Value可以是普通类型,也可以是自己写的JavaBean(本文),还可以是带有泛型的List(下一篇博客).本例中您要重点看如何将Json转回为普通JavaBean对象时TypeToken的定义.
?
实体类:
?
?
?
- public?class?Point?{??
- ????private?int?x;??
- ????private?int?y;??
- ??
- ????public?Point(int?x,?int?y)?{??
- ????????this.x?=?x;??
- ????????this.y?=?y;??
- ????}??
- ??
- ????public?int?getX()?{??
- ????????return?x;??
- ????}??
- ??
- ????public?void?setX(int?x)?{??
- ????????this.x?=?x;??
- ????}??
- ??
- ????public?int?getY()?{??
- ????????return?y;??
- ????}??
- ??
- ????public?void?setY(int?y)?{??
- ????????this.y?=?y;??
- ????}??
- ??
- ????@Override??
- ????public?String?toString()?{??
- ????????return?"Point?[x="?+?x?+?",?y="?+?y?+?"]";??
- ????}??
- ??
- }??
测试类:
?
?
- import?java.util.LinkedHashMap;??
- import?java.util.Map;??
- ??
- import?com.google.gson.Gson;??
- import?com.google.gson.GsonBuilder;??
- import?com.google.gson.reflect.TypeToken;??
- ??
- public?class?GsonTest3?{??
- ??
- ????public?static?void?main(String[]?args)?{??
- ????????Gson?gson?=?new?GsonBuilder().enableComplexMapKeySerialization()??
- ????????????????.create();??
- ??
- ????????Map<Point,?String>?map1?=?new?LinkedHashMap<Point,?String>();//?使用LinkedHashMap将结果按先进先出顺序排列??
- ????????map1.put(new?Point(5,?6),?"a");??
- ????????map1.put(new?Point(8,?8),?"b");??
- ????????String?s?=?gson.toJson(map1);??
- ????????System.out.println(s);//?结果:[[{"x":5,"y":6},"a"],[{"x":8,"y":8},"b"]]??
- ??
- ????????Map<Point,?String>?retMap?=?gson.fromJson(s,??
- ????????????????new?TypeToken<Map<Point,?String>>()?{??
- ????????????????}.getType());??
- ????????for?(Point?p?:?retMap.keySet())?{??
- ????????????System.out.println("key:"?+?p?+?"?values:"?+?retMap.get(p));??
- ????????}??
- ????????System.out.println(retMap);??
- ??
- ????????System.out.println("----------------------------------");??
- ????????Map<String,?Point>?map2?=?new?LinkedHashMap<String,?Point>();??
- ????????map2.put("a",?new?Point(3,?4));??
- ????????map2.put("b",?new?Point(5,?6));??
- ????????String?s2?=?gson.toJson(map2);??
- ????????System.out.println(s2);??
- ??
- ????????Map<String,?Point>?retMap2?=?gson.fromJson(s2,??
- ????????????????new?TypeToken<Map<String,?Point>>()?{??
- ????????????????}.getType());??
- ????????for?(String?key?:?retMap2.keySet())?{??
- ????????????System.out.println("key:"?+?key?+?"?values:"?+?retMap2.get(key));??
- ????????}??
- ??
- ????}??
- }??
结果:
?
?
- [[{"x":5,"y":6},"a"],[{"x":8,"y":8},"b"]]??
- key:Point?[x=5,?y=6]?values:a??
- key:Point?[x=8,?y=8]?values:b??
- {Point?[x=5,?y=6]=a,?Point?[x=8,?y=8]=b}??
- ----------------------------------??
- {"a":{"x":3,"y":4},"b":{"x":5,"y":6}}??
- key:a?values:Point?[x=3,?y=4]??
- key:b?values:Point?[x=5,?y=6]??
?
?