Gson之实例三-Map处理(上)

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:akey: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]



转载于:https://my.oschina.net/mbreath/blog/522359

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值