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]
Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 (http://blog.csdn.net/lk_blog/article/details/7685169)
Json转换利器Gson之实例二-Gson注解和GsonBuilder (http://blog.csdn.net/lk_blog/article/details/7685190)
Json转换利器Gson之实例三-Map处理(上) (http://blog.csdn.net/lk_blog/article/details/7685210)
Json转换利器Gson之实例四-Map处理(下) (http://blog.csdn.net/lk_blog/article/details/7685224)
Json转换利器Gson之实例五-实际开发中的特殊需求处理 (http://blog.csdn.net/lk_blog/article/details/7685237)
Json转换利器Gson之实例六-注册TypeAdapter及处理Enum类型 (http://blog.csdn.net/lk_blog/article/details/7685347)
实例代码下载: http://download.csdn.net/detail/lk_blog/4387822