Gson解析Map格式json数据

来源:互联网 发布:mac cd 到u盘 编辑:程序博客网 时间:2024/06/10 19:04

有时候我们不需要把实体的所有属性都导出,只想把一部分属性导出为Json.

有时候我们的实体类会随着版本的升级而修改.

有时候我们想对输出的json默认排好格式


这时就可以使用GsonBuilder创建Gson,并且配置一些选项。

 Gson gson = new GsonBuilder()   .excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性   .enableComplexMapKeySerialization() //支持Map的key为复杂对象的形式  .serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")//时间转化为特定格式     .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.   .setPrettyPrinting() //对json结果格式化.    .setVersion(1.0)    //有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.                              //@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么                              //@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.    .create(); 

gson解析各种map格式的json数据

 Gson gson = new GsonBuilder()          .enableComplexMapKeySerialization()          .setPrettyPrinting()          .create();   HashMap<String, String> map =new HashMap<String, String>();map.put("1", "数学");  map.put("2", "语文");  map.put("3", "英语");  map.put("4", "物理");  String mapString =gson.toJson(map);HashMap<String, String> map2 = gson.fromJson(mapString, new TypeToken<HashMap<String, String>>(){}.getType());Log.e("GsonActivity", map2.toString()); HashMap<String, Student> map3 =new HashMap<String, Student>();Student student1 =new Student(1, "李三", 20);Student student2 =new Student(2, "李四", 30);Student student3 =new Student(3, "王泽瑞", 40);map3.put("1",student1);map3.put("2",student2);map3.put("3",student3);String map3String =gson.toJson(map3);HashMap<String, Student> map4 = gson.fromJson(map3String, new TypeToken<HashMap<String, Student>>(){}.getType());Log.e("GsonActivity", map4.toString()); HashMap<String,List<Student>> mapList = new HashMap<String,List<Student>>();  List<Student> students =new ArrayList<Student>();students.add(student1);students.add(student2);students.add(student3);mapList.put("test1", students);String mapListString = gson.toJson(mapList);HashMap<String,List<Student>> map5 = gson.fromJson(mapListString, new TypeToken<HashMap<String,List<Student>>>(){}.getType());Log.e("GsonActivity", map5.toString()); 

输出结果:


{4=物理, 1=数学, 2=语文, 3=英语}{1=[id = 1,nickName=李三,age=20], 2=[id = 2,nickName=李四,age=30], 3=[id = 3,nickName=王泽瑞,age=40]}{test1=[[id = 1,nickName=李三,age=20], [id = 2,nickName=李四,age=30], [id = 3,nickName=王泽瑞,age=40]]} 

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



解析Date类型的数据格式

            Gson gson = new GsonBuilder()          .setPrettyPrinting()          .setDateFormat("yyyy-MM-dd HH:mm:ss")          .create(); Student student =new Student(1, "李三", 20); student.birthDay = new Date();  String jsonString =gson.toJson(student); Log.e("GsonActivity", jsonString);  Student student2 = gson.fromJson(jsonString, Student.class); Log.e("GsonActivity", student2.toString() + ", date = " + student2.birthDay); </span>

输出结果:


 { "age": 20,   "birthDay": "2016-07-27 13:38:02", "id": 1, "nickName": "李三" } [id = 1,nickName=李三,age=20], date = Wed Jul 27 13:38:02 GMT+08:00 2016


解析数组格式的json数据

<span style="color:#000000;">Gson gson =new Gson();Student student1 =new Student(1, "李三", 20);Student student2 =new Student(2, "李四", 30);Student[] students =new Student[]{student1,student2};String jsonString =gson.toJson(students);Log.e("GsonActivity", jsonString);  Student[] arrayStudents =gson.fromJson(jsonString, Student[].class); for(Student student :arrayStudents) {   Log.e("GsonActivity", student.toString());      } </span>


输出结果:

<span style="color:#000000;"> [{"age":20,"id":1,"nickName":"李三"},{"age":30,"id":2,"nickName":"李四"}][id = 1,nickName=李三,age=20] [id = 2,nickName=李四,age=30]</span>




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头七家里有狗怎么办 股票退市股民的钱怎么办 美国股票退市股民怎么办 百度云字幕和视频不同步怎么办 百度云加载字幕有延迟怎么办 很难适应新环境怎么办 蜘蛛丝碰到嘴唇上起包有毒怎么办? 电瓶车在路上爆胎了怎么办 嘴被虫子咬肿了怎么办 高铁管家购票失败怎么办 高铁车厢空调冷怎么办 高铁票过了时间怎么办 网购火车票丢了怎么办 改签没有票了怎么办 火车票取了没赶上车怎么办 上车后车票丢了怎么办 晒了吗任务过期怎么办 坐火车买了站票怎么办 坐火车忘记带票怎么办 距离二本线差几分怎么办 行李包落火车候车厅怎么办 高铁票买错地点怎么办 高铁票买错日期怎么办 票买错时间了怎么办 上高铁了票丢了怎么办 上车前高铁票丢了怎么办 高铁安检没收的东西怎么办 高铁安检员老了怎么办 高铁安检喷雾拍照了怎么办 十个小时的高铁怎么办 华为开机需要激活码怎么办 高铁提前上车了出站怎么办 买火车票忘记带身份证怎么办 买高铁票没赶上怎么办 电脑放视频没有声音怎么办 内业计算中角度超限怎么办 遇到飞机出故障乘客怎么办 模拟城市5矿产满了怎么办 模拟城市5劳工短缺怎么办 模拟城市5土地价值低怎么办 考上研究生想二战研究生学籍怎么办