Gson使用三(Map集合的处理,一对多处理)

来源:互联网 发布:windows vista是什么 编辑:程序博客网 时间:2024/05/21 14:55

转载请出自出处:http://eksliang.iteye.com/blog/2175532

一、概述

       Map保存的是键值对的形式,Json的格式也是键值对的,所以正常情况下,map跟json之间的转换应当是理所当然的事情。

二、Map参考实例

package com.ickes.json;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.google.gson.reflect.TypeToken;import com.ickes.json.daomain.User;/** * Gson对Map的处理 * @author Ickes * */public class MapTest {public static void main(String[] args) {/** * 普通map处理 */Map<String,String> map = new HashMap<String,String>();map.put("name","ickes");map.put("pwd", "123");Gson gson = new GsonBuilder().enableComplexMapKeySerialization().setPrettyPrinting().setDateFormat("yyyy-MM-dd HH:mm:ss").create();//map的序列化String json=gson.toJson(map);System.out.println("map的序列化:\n"+json);//map的反序列化Type typeMap = new TypeToken<Map<String,String>>(){}.getType();map = gson.fromJson(json,typeMap);System.out.println("map的反序列化:");for (Map.Entry<String,String> entry: map.entrySet()) {System.out.println(entry.getKey()+"-"+entry.getValue());}/** * /map对象测试 */Map<String,User> mapUser = new HashMap<String,User>();User user1 = new User("A001", "xl","xl_123",24,12000F,new Date());User user2 = new User("A002", "x2","xl_223",24,13000F,new Date());mapUser.put("user1",user1);mapUser.put("user2",user2);json = gson.toJson(mapUser);System.out.println("Map对象的序列化:\n"+json);//map对象的反序列化Type typeUser = new TypeToken<Map<String,User>>(){}.getType();mapUser = gson.fromJson(json, typeUser);System.out.println("map对象的反序列化:");for (Map.Entry<String,User> entry: mapUser.entrySet()) {System.out.println(entry.getKey()+"-"+entry.getValue());}/** * 整合测试 */Map<String,List<User>> mapList = new HashMap<String,List<User>>();List<User> users = new ArrayList<User>();users.add(user1);users.add(user2);mapList.put("mapList",users);//序列化json = gson.toJson(mapList);System.out.println("mapList的序列化:\n"+json);//反序列化Type typeMapList = new TypeToken<Map<String,List<User>>>(){}.getType();mapList = gson.fromJson(json, typeMapList);System.out.println("mapList对象的反序列化:");for (Map.Entry<String,List<User>> entry: mapList.entrySet()) {System.out.println(entry.getKey()+"-"+entry.getValue());}}}

 返回结果:

<span style="font-size: 14px;">map的序列化:{  "pwd": "123",  "name": "ickes"}map的反序列化:pwd-123name-ickesMap对象的序列化:{  "user2": {    "id": "A002",    "userName": "x2",    "userPwd": "xl_223",    "age": 24,    "price": 13000.0,    "birthday": "2015-01-13 16:06:48"  },  "user1": {    "id": "A001",    "userName": "xl",    "userPwd": "xl_123",    "age": 24,    "price": 12000.0,    "birthday": "2015-01-13 16:06:48"  }}map对象的反序列化:user2-User [id=A002, userName=x2, userPwd=xl_223, age=24, price=13000.0, birthday=Tue Jan 13 16:06:48 CST 2015]user1-User [id=A001, userName=xl, userPwd=xl_123, age=24, price=12000.0, birthday=Tue Jan 13 16:06:48 CST 2015]mapList的序列化:{  "mapList": [    {      "id": "A001",      "userName": "xl",      "userPwd": "xl_123",      "age": 24,      "price": 12000.0,      "birthday": "2015-01-13 16:06:48"    },    {      "id": "A002",      "userName": "x2",      "userPwd": "xl_223",      "age": 24,      "price": 13000.0,      "birthday": "2015-01-13 16:06:48"    }  ]}mapList对象的反序列化:mapList-[User [id=A001, userName=xl, userPwd=xl_123, age=24, price=12000.0, birthday=Tue Jan 13 16:06:48 CST 2015], User [id=A002, userName=x2, userPwd=xl_223, age=24, price=13000.0, birthday=Tue Jan 13 16:06:48 CST 2015]]</span>

         温馨提示:Gson在序列化Map时,默认情况下,是调用Key的toString方法得到它的JSON字符串的Key,对于简单类型和字符串类型,这没有问题,但是对于复杂数据对象,如果对象没有覆写toString方法,那么默认的toString方法将得到这个对象的Hash地址,通过调用GsonBuilder的enableComplexMapKeySerialization()来启用对Map键(key)的序列化.

 

 

 

三、一对多参考实例

下面实例提供了User(员工)对Dept(部门)一对多的映射关系

User实体类:

package com.ickes.json.daomain;import java.util.Date;/** * @author Ickes */public class User {private String userName;private String userPwd;private Integer age;private Date    birthday;public User(String userName, String userPwd, Integer age, Date birthday) {super();this.userName = userName;this.userPwd = userPwd;this.age = age;this.birthday = birthday;}get()和set()方法省略.....!@Overridepublic String toString() {return "User [userName=" + userName + ", userPwd=" + userPwd + ", age="+ age + ", birthday=" + birthday + "]";}}

    Dept实体类:

   

package com.ickes.json.daomain;import java.util.List;public class Dept {private String id;private String deptName;private List<User> users;public Dept(String id, String deptName) {super();this.id = id;this.deptName = deptName;}get()和set()方法省略......!@Overridepublic String toString() {return "Dept [id=" + id + ", deptName=" + deptName + ", users=" + users+ "]";} }

    测试实体类:

   

package com.ickes.json.daomain;import java.util.ArrayList;import java.util.Date;import java.util.List;import com.google.gson.Gson;import com.google.gson.GsonBuilder;/** * Gson处理这种一对多的序列化 * @author Ickes * */public class DeptTest {public static void main(String[] args) {User user1 = new User("xl","xl_223",12100,new Date());User user2 = new User("x2","xl_323",12300,new Date());User user3 = new User("x3","xl_423",12300,new Date());Dept dept = new Dept("D001","技术预研部");List<User> users = new ArrayList<User>();users.add(user1);users.add(user2);users.add(user3);dept.setUsers(users);Gson gson = new GsonBuilder().setPrettyPrinting().setDateFormat("yyyy-MM-dd HH:mm:ss").create();String json=gson.toJson(dept);System.out.println("一对多的序列化:\n"+json);dept = gson.fromJson(json,Dept.class);System.out.println("一对多的反序列化:\n"+dept);}}

   返回结果如下:

一对多的序列化:{  "id": "D001",  "deptName": "技术预研部",  "users": [    {      "userName": "xl",      "userPwd": "xl_223",      "age": 12100,      "birthday": "2015-01-13 18:57:23"    },    {      "userName": "x2",      "userPwd": "xl_323",      "age": 12300,      "birthday": "2015-01-13 18:57:23"    },    {      "userName": "x3",      "userPwd": "xl_423",      "age": 12300,      "birthday": "2015-01-13 18:57:23"    }  ]}一对多的反序列化:Dept [id=D001, deptName=技术预研部, users=[User [userName=xl, userPwd=xl_223, age=12100, birthday=Tue Jan 13 18:57:23 CST 2015],        User [userName=x2, userPwd=xl_323, age=12300, birthday=Tue Jan 13 18:57:23 CST 2015],       User [userName=x3, userPwd=xl_423, age=12300, birthday=Tue Jan 13 18:57:23 CST 2015]       ]]

 

 

 

 

0 0
原创粉丝点击