您的位置:首页 > Web前端 > JavaScript

Json转换利器Gson之实例三-Map处理(上)

2014-04-03 11:20 597 查看

Map的存储结构式Key/Value形式,Key 和 Value可以是普通类型,也可以是自己写的JavaBean(本文),还可以是带有泛型的List(下一篇博客).本例中您要重点看如何将Json转回为普通JavaBean对象时TypeToken的定义.

实体类:

[java]
view plaincopyprint?

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 + "]";  
    }  
  
}  

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 + "]";
}

}


测试类:

[java]
view plaincopyprint?

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));  
        }  
  
    }  
}  

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));
}

}
}


结果:

[plain]
view plaincopyprint?

[[{"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]  

[[{"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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: