• 【转】 Json转换利器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: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]
    

     

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

    实体类:

    import java.util.Date;
    
    public class Student {
    	private int id;
    	private String name;
    	private Date birthDay;
    
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public Date getBirthDay() {
    		return birthDay;
    	}
    
    	public void setBirthDay(Date birthDay) {
    		this.birthDay = birthDay;
    	}
    
    	@Override
    	public String toString() {
    		return "Student [birthDay=" + birthDay + ", id=" + id + ", name="
    				+ name + "]";
    	}
    
    }
    

     

    public class Teacher {
    	private int id;
    
    	private String name;
    
    	private String title;
    
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getTitle() {
    		return title;
    	}
    
    	public void setTitle(String title) {
    		this.title = title;
    	}
    
    	@Override
    	public String toString() {
    		return "Teacher [id=" + id + ", name=" + name + ", title=" + title
    				+ "]";
    	}
    
    }
    

     测试类:

    package com.tgb.lk.demo.gson.test4;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    
    public class GsonTest4 {
    	public static void main(String[] args) {
    		Student student1 = new Student();
    		student1.setId(1);
    		student1.setName("李坤");
    		student1.setBirthDay(new Date());
    
    		Student student2 = new Student();
    		student2.setId(2);
    		student2.setName("曹贵生");
    		student2.setBirthDay(new Date());
    
    		Student student3 = new Student();
    		student3.setId(3);
    		student3.setName("柳波");
    		student3.setBirthDay(new Date());
    
    		List<Student> stulist = new ArrayList<Student>();
    		stulist.add(student1);
    		stulist.add(student2);
    		stulist.add(student3);
    
    		Teacher teacher1 = new Teacher();
    		teacher1.setId(1);
    		teacher1.setName("米老师");
    		teacher1.setTitle("教授");
    
    		Teacher teacher2 = new Teacher();
    		teacher2.setId(2);
    		teacher2.setName("丁老师");
    		teacher2.setTitle("讲师");
    		List<Teacher> teacherList = new ArrayList<Teacher>();
    		teacherList.add(teacher1);
    		teacherList.add(teacher2);
    
    		Map<String, Object> map = new LinkedHashMap<String, Object>();
    		map.put("students", stulist);
    		map.put("teachers", teacherList);
    
    		Gson gson = new Gson();
    		String s = gson.toJson(map);
    		System.out.println(s);
    
    		System.out.println("----------------------------------");
    
    		Map<String, Object> retMap = gson.fromJson(s,
    				new TypeToken<Map<String, List<Object>>>() {
    				}.getType());
    
    		for (String key : retMap.keySet()) {
    			System.out.println("key:" + key + " values:" + retMap.get(key));
    			if (key.equals("students")) {
    				List<Student> stuList = (List<Student>) retMap.get(key);
    				System.out.println(stuList);
    			} else if (key.equals("teachers")) {
    				List<Teacher> tchrList = (List<Teacher>) retMap.get(key);
    				System.out.println(tchrList);
    			}
    		}
    
    	}
    }
    

     输出结果:

    {"students":[{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 9:48:19 PM"},{"id":2,"name":"曹贵生","birthDay":"Jun 22, 2012 9:48:19 PM"},{"id":3,"name":"柳波","birthDay":"Jun 22, 2012 9:48:19 PM"}],"teachers":[{"id":1,"name":"米老师","title":"教授"},{"id":2,"name":"丁老师","title":"讲师"}]}
    ----------------------------------
    key:students values:[{id=1.0, name=李坤, birthDay=Jun 22, 2012 9:48:19 PM}, {id=2.0, name=曹贵生, birthDay=Jun 22, 2012 9:48:19 PM}, {id=3.0, name=柳波, birthDay=Jun 22, 2012 9:48:19 PM}]
    [{id=1.0, name=李坤, birthDay=Jun 22, 2012 9:48:19 PM}, {id=2.0, name=曹贵生, birthDay=Jun 22, 2012 9:48:19 PM}, {id=3.0, name=柳波, birthDay=Jun 22, 2012 9:48:19 PM}]
    key:teachers values:[{id=1.0, name=米老师, title=教授}, {id=2.0, name=丁老师, title=讲师}]
    [{id=1.0, name=米老师, title=教授}, {id=2.0, name=丁老师, title=讲师}]
    

      

  • 相关阅读:
    网站无脑搭建,自己可以建个站玩一玩儿
    Python2和Python3中urllib库中urlencode的使用注意事项
    图像的缩放与图像金字塔
    模糊聚类算法(FCM)
    java调用python脚本
    雷林鹏分享:jsp HTTP 状态码
    雷林鹏分享:jsp 服务器响应
    雷林鹏分享:jsp 客户端请求
    雷林鹏分享:jsp 隐式对象
    雷林鹏分享:jsp 动作元素
  • 原文地址:https://www.cnblogs.com/daocaowu/p/3341992.html
Copyright © 2020-2023  润新知