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
- Gson使用三(Map集合的处理,一对多处理)
- Json转换利器Gson之实例三-Map处理(上)
- Json转换利器Gson之实例三-Map处理(上)
- Json转换利器Gson之实例三-Map处理(上)
- Json转换利器Gson之实例三-Map处理(上)
- Json转换利器Gson之实例三-Map处理上
- Json转换利器Gson之实例三-Map处理(上)
- Json转换利器Gson之实例三-Map处理(上)
- Json转换利器Gson之实例三-Map处理(上)
- Json转换利器Gson之实例三-Map处理(上)
- Gson-----6、Map处理(上)
- Gson-----7、Map处理(下)
- Mybatis一对多的处理
- 一个处理多值Map集合的算法
- map集合加载数据的处理
- Map扩展一对多的使用
- Java-Map集合的应用-一对多的映射…
- Json转换利器Gson之实例三-Map处理(上)--(LinkedHashMap)--(手动解析-TypeToken)
- Mogodb的Shell基本操作笔记(CURD)
- MongoDB更新文档
- Gson使用一(Gson)
- Gson使用二(GsonBuilder)
- fenghuo123
- Gson使用三(Map集合的处理,一对多处理)
- Oracle在win2008服务器安装简要流程
- Gson使用四(TypeAdapter)
- [置顶] SolrCloud中的文件与Collection管理
- [JSOI2007]文本生成器
- 韩顺平php视频笔记68 析构函数 php垃圾回收机制
- xcode 6 exporting ipa 提示 Your account already has a valid iOS distribution certificate 的另一种解决方法
- linux 下磁盘空间查看和文件、文件夹查看
- IIS 6 元数据库与IIS 6 配置的兼容性 解决方案