介绍一下是用Gson来解析json的方式。

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

直接上代码吧,代码里面有一些注释。参考了老罗的demo和lk_blog的博客。

还是那句话,json传递过来,在一些环境下是直接解析然后做其他处理,有的时候要转换到一个java对象。

先上java对象。我直接放到一个文件里面了。

  1 package com.android.domain;
  2
  3 import java.util.Date;
  4
  5 public class Person {
  6
  7     private String name;
  8     private int age;
  9     private String address;
 10     private Date birthDay;
 11
 12     public String getName() {
 13         return name;
 14     }
 15
 16     public Date getBirthDay() {
 17         return birthDay;
 18     }
 19
 20     public void setBirthDay(Date birthDay) {
 21         this.birthDay = birthDay;
 22     }
 23
 24     @Override
 25     public String toString() {
 26         return "Person [name=" + name + ", age=" + age + ", address=" + address
 27                 + ", birthDay=" + birthDay + "]";
 28     }
 29
 30     public void setName(String name) {
 31         this.name = name;
 32     }
 33
 34     public int getAge() {
 35         return age;
 36     }
 37
 38     public void setAge(int age) {
 39         this.age = age;
 40     }
 41
 42     public String getAddress() {
 43         return address;
 44     }
 45
 46     public void setAddress(String address) {
 47         this.address = address;
 48     }
 49
 50     public Person() {
 51         // TODO Auto-generated constructor stub
 52     }
 53
 54 }
 55
 56
 57 package com.android.domain;
 58
 59 public class Point {
 60     private int x;
 61     private int y;
 62
 63     public Point(int x, int y) {
 64         this.x = x;
 65         this.y = y;
 66     }
 67
 68     public int getX() {
 69         return x;
 70     }
 71
 72     public void setX(int x) {
 73         this.x = x;
 74     }
 75
 76     public int getY() {
 77         return y;
 78     }
 79
 80     public void setY(int y) {
 81         this.y = y;
 82     }
 83
 84     @Override
 85     public String toString() {
 86         return "Point [x=" + x + ", y=" + y + "]";
 87     }
 88
 89 }
 90
 91 package com.android.domain;
 92
 93 import java.util.Date;
 94
 95 import com.google.gson.annotations.Expose;
 96 import com.google.gson.annotations.SerializedName;
 97
 98 public class Student {
 99     private int id;
100
101     @Expose
102     private String name;
103
104     @Expose
105     @SerializedName("bir")
106     private Date birthDay;
107
108     public int getId() {
109         return id;
110     }
111
112     public void setId(int id) {
113         this.id = id;
114     }
115
116     public String getName() {
117         return name;
118     }
119
120     public void setName(String name) {
121         this.name = name;
122     }
123
124     public Date getBirthDay() {
125         return birthDay;
126     }
127
128     public void setBirthDay(Date birthDay) {
129         this.birthDay = birthDay;
130     }
131
132     @Override
133     public String toString() {
134         return "Student [birthDay=" + birthDay + ", id=" + id + ", name="
135                 + name + "]";
136     }
137
138 }

接着就是执行类了。这里只是java的,跟android的差别不大。

  1 package com.android.mygson;
  2
  3 import java.util.ArrayList;
  4 import java.util.Date;
  5 import java.util.HashMap;
  6 import java.util.LinkedHashMap;
  7 import java.util.List;
  8 import java.util.Map;
  9
 10 import com.android.domain.Person;
 11 import com.android.domain.Point;
 12 import com.google.gson.Gson;
 13 import com.google.gson.reflect.TypeToken;
 14
 15 public class GsonTools {
 16
 17     public GsonTools() {
 18         // TODO Auto-generated constructor stub
 19     }
 20
 21     public static String createGsonString(Object object) {
 22         Gson gson = new Gson();
 23         String gsonString = gson.toJson(object);
 24         return gsonString;
 25     }
 26
 27     public static <T> T changeGsonToBean(String gsonString, Class<T> cls) {
 28         Gson gson = new Gson();
 29         T t = gson.fromJson(gsonString, cls);
 30         return t;
 31     }
 32
 33     public static <T> List<T> changeGsonToList(String gsonString, Class<T> cls) {
 34         Gson gson = new Gson();
 35         List<T> list_person = gson.fromJson(gsonString,
 36                 new TypeToken<List<T>>() {
 37                 }.getType());
 38         return list_person;
 39     }
 40
 41     public static List<Map<String, Object>> changeGsonToListMaps(String gsonString) {
 42         List<Map<String, Object>> list = null;
 43         Gson gson = new Gson();
 44         list = gson.fromJson(gsonString,
 45                 new TypeToken<List<Map<String, Object>>>() {
 46                 }.getType());
 47         return list;
 48     }
 49
 50     //这个方法太水了,因为json本来就是类似与map。。。
 51     public static Map<String, Point> changeGsonToMap(String gsonString){
 52         Map <String,Point> map = null;
 53         Gson gson= new Gson();
 54         map=gson.fromJson(gsonString, new TypeToken<Map<String,Object>>(){}.getType());
 55         return map;
 56
 57     }
 58     /**
 59      * @param args
 60      */
 61     public static void main(String[] args) {
 62         // TODO Auto-generated method stub
 63
 64
 65
 66         Person person1= new Person();
 67         person1.setAge(1);
 68         person1.setName("xx");
 69         person1.setBirthDay(new Date());
 70
 71         // //
 72         System.out.println("----------简单对象之间的转化-------------");
 73         // 简单的bean转为json
 74         String s1 = createGsonString(person1);
 75         System.out.println("简单Bean转化为Json===" + s1);
 76
 77         // json转为简单Bean
 78         Person person = changeGsonToBean(s1, Person.class);
 79         System.out.println("Json转为简单Bean===" + person);
 80
 81
 82         Person person2= new Person();
 83         person2.setAge(2);
 84         person2.setName("xue");
 85         person2.setBirthDay(new Date());
 86         Person person3= new Person();
 87         person3.setAge(3);
 88         person3.setName("yuan");
 89         person3.setBirthDay(new Date());
 90
 91
 92         List<Person> list= new ArrayList<Person>();
 93         list.add(person1);
 94         list.add(person2);
 95         list.add(person3);
 96
 97         System.out.println("----------带泛型的List之间的转化-------------");
 98         // 带泛型的list转化为json
 99         String s2 = createGsonString(list);
100         System.out.println("带泛型的list转化为json==" + s2);
101
102         List<Person> retList=changeGsonToList(s2, Person.class);
103         System.out.println("Json转为List===" + retList);
104
105
106         Map<String,Point > map_point = new LinkedHashMap<String,Point >();// 使用LinkedHashMap将结果按先进先出顺序排列
107         map_point.put( "first",new Point(5, 6));
108         map_point.put( "second",new Point(8, 8));
109
110         String s_map=createGsonString(map_point);
111         System.out.println("map转化为json==" + s_map);
112
113          Map<String,Point> map_point1 = changeGsonToMap(s_map);
114          System.out.println("json转化为map==" + s_map);
115
116
117         List<Map<String, Object>> list_map = new ArrayList<Map<String, Object>>();
118         Map<String, Object> map = new HashMap<String, Object>();
119         map.put("name", "jack");
120         map.put("age", 23);
121         Map<String, Object> map2 = new HashMap<String, Object>();
122         map2.put("name", "rose");
123         map2.put("age", 24);
124         list_map.add(map);
125         list_map.add(map2);
126         String gsonString = createGsonString(list);
127         System.out.println(gsonString);
128         System.out.println("----------List嵌套map-------------");
129         List<Map<String, Object>> list2 = changeGsonToListMaps(gsonString);
130         System.out.println(list2.toString());
131
132
133
134
135     }
136
137 }

输出:

----------简单对象之间的转化-------------

简单Bean转化为Json==={"name":"xx","age":1,"birthDay":"Mar 27, 2014 6:31:09 PM"}

Json转为简单Bean===Person [name=xx, age=1, address=null, birthDay=Thu Mar 27 18:31:09 CST 2014]

----------带泛型的List之间的转化-------------

带泛型的list转化为json==[{"name":"xx","age":1,"birthDay":"Mar 27, 2014 6:31:09 PM"},{"name":"xue","age":2,"birthDay":"Mar 27, 2014 6:31:09 PM"},{"name":"yuan","age":3,"birthDay":"Mar 27, 2014 6:31:09 PM"}]

Json转为List===[{name=xx, age=1.0, birthDay=Mar 27, 2014 6:31:09 PM}, {name=xue, age=2.0, birthDay=Mar 27, 2014 6:31:09 PM}, {name=yuan, age=3.0, birthDay=Mar 27, 2014 6:31:09 PM}]

map转化为json=={"first":{"x":5,"y":6},"second":{"x":8,"y":8}}

json转化为map=={"first":{"x":5,"y":6},"second":{"x":8,"y":8}}

[{"name":"xx","age":1,"birthDay":"Mar 27, 2014 6:31:09 PM"},{"name":"xue","age":2,"birthDay":"Mar 27, 2014 6:31:09 PM"},{"name":"yuan","age":3,"birthDay":"Mar 27, 2014 6:31:09 PM"}]

----------List嵌套map-------------

[{name=xx, age=1.0, birthDay=Mar 27, 2014 6:31:09 PM}, {name=xue, age=2.0, birthDay=Mar 27, 2014 6:31:09 PM}, {name=yuan, age=3.0, birthDay=Mar 27, 2014 6:31:09 PM}]

 1 package com.android.mygson;
 2 import java.util.ArrayList;
 3 import java.util.Date;
 4 import java.util.List;
 5
 6 import com.android.domain.Student;
 7 import com.google.gson.FieldNamingPolicy;
 8 import com.google.gson.Gson;
 9 import com.google.gson.GsonBuilder;
10 import com.google.gson.reflect.TypeToken;
11
12 public class GsonTest2 {
13
14     public static void main(String[] args) {
15         //注意这里的Gson的构建方式为GsonBuilder,区别于test1中的Gson gson = new Gson();
16         Gson gson = new GsonBuilder()
17         .excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性
18         .enableComplexMapKeySerialization() //支持Map的key为复杂对象的形式
19         .serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")//时间转化为特定格式
20         .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.
21         .setPrettyPrinting() //对json结果格式化.
22         .setVersion(1.0)    //有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.
23                             //@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么
24                             //@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.
25         .create();
26
27
28
29         Student student1 = new Student();
30         student1.setId(1);
31         student1.setName("李坤");
32         student1.setBirthDay(new Date());
33
34         // //
35         System.out.println("----------简单对象之间的转化-------------");
36         // 简单的bean转为json
37         String s1 = gson.toJson(student1);
38         System.out.println("简单Bean转化为Json===" + s1);
39
40         // json转为简单Bean
41         Student student = gson.fromJson(s1, Student.class);
42         System.out.println("Json转为简单Bean===" + student);
43         // //
44
45         Student student2 = new Student();
46         student2.setId(2);
47         student2.setName("曹贵生");
48         student2.setBirthDay(new Date());
49
50         Student student3 = new Student();
51         student3.setId(3);
52         student3.setName("柳波");
53         student3.setBirthDay(new Date());
54
55         List<Student> list = new ArrayList<Student>();
56         list.add(student1);
57         list.add(student2);
58         list.add(student3);
59
60         System.out.println("----------带泛型的List之间的转化-------------");
61         // 带泛型的list转化为json
62         String s2 = gson.toJson(list);
63         System.out.println("带泛型的list转化为json==" + s2);
64
65         // json转为带泛型的list
66         List<Student> retList = gson.fromJson(s2,
67                 new TypeToken<List<Student>>() {
68                 }.getType());
69         for (Student stu : retList) {
70             System.out.println(stu);
71         }
72
73     }
74 }

输出:

----------简单对象之间的转化-------------

简单Bean转化为Json==={

"Name": "李坤",

"bir": "2014-03-27 18:32:20:301"

}

Json转为简单Bean===Student [birthDay=Thu Mar 27 18:32:20 CST 2014, id=0, name=李坤]

----------带泛型的List之间的转化-------------

带泛型的list转化为json==[

{

"Name": "李坤",

"bir": "2014-03-27 18:32:20:301"

},

{

"Name": "曹贵生",

"bir": "2014-03-27 18:32:20:343"

},

{

"Name": "柳波",

"bir": "2014-03-27 18:32:20:343"

}

]

Student [birthDay=Thu Mar 27 18:32:20 CST 2014, id=0, name=李坤]

Student [birthDay=Thu Mar 27 18:32:20 CST 2014, id=0, name=曹贵生]

Student [birthDay=Thu Mar 27 18:32:20 CST 2014, id=0, name=柳波]

 1 package com.android.mygson;
 2
 3 import java.util.LinkedHashMap;
 4 import java.util.Map;
 5
 6 import com.android.domain.Point;
 7 import com.google.gson.Gson;
 8 import com.google.gson.GsonBuilder;
 9 import com.google.gson.reflect.TypeToken;
10
11 public class GsonTest3 {
12
13     public static void main(String[] args) {
14         Gson gson = new GsonBuilder().enableComplexMapKeySerialization()
15                 .create();
16
17         Map<Point, String> map1 = new LinkedHashMap<Point, String>();// 使用LinkedHashMap将结果按先进先出顺序排列
18         map1.put(new Point(5, 6), "first");
19         map1.put(new Point(8, 8), "second");
20         String s = gson.toJson(map1);
21         System.out.println(s);
22
23         Map<Point, String> retMap = gson.fromJson(s,
24                 new TypeToken<Map<Point, String>>() {
25                 }.getType());
26         for (Point p : retMap.keySet()) {
27             System.out.println("key:" + p + " values:" + retMap.get(p));
28         }
29         System.out.println(retMap);
30
31         System.out.println("----------------------------------");
32         Map<String, Point> map2 = new LinkedHashMap<String, Point>();
33         map2.put("first", new Point(3, 4));
34         map2.put("second", new Point(5, 6));
35         String s2 = gson.toJson(map2);
36         System.out.println(s2);
37
38         Map<String, Point> retMap2 = gson.fromJson(s2,
39                 new TypeToken<Map<String, Point>>() {
40                 }.getType());
41         for (String key : retMap2.keySet()) {
42             System.out.println("key:" + key + " values:" + retMap2.get(key));
43         }
44
45     }
46 }

输出:

[[{"x":5,"y":6},"first"],[{"x":8,"y":8},"second"]]

key:Point [x=5, y=6] values:first

key:Point [x=8, y=8] values:second

{Point [x=5, y=6]=first, Point [x=8, y=8]=second}

----------------------------------

{"first":{"x":3,"y":4},"second":{"x":5,"y":6}}

key:first values:Point [x=3, y=4]

key:second values:Point [x=5, y=6]

转载于:https://www.cnblogs.com/aosting/p/3628980.html

使用Gson 解析json相关推荐

  1. Android之GSON解析JSON

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库. 比如: <pre name="code" class=" ...

  2. JSONObject 和 GSON 解析 JSON 数据详解(转)

    转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数 ...

  3. gson解析php,php,android_关于 Gson 解析JSON数据。。。,php,android - phpStudy

    关于 Gson 解析JSON数据... 1.首先,我是从服务器端传回来的JSON数据如下: {"info":"succeed","user_id&qu ...

  4. Java-json系列(一):用GSON解析Json格式数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  5. 软件测试开发实战| Java版本,Gson解析json比较常用的2种方式

    软件测试开发基础中,关于json的解析是比较常见的,作为软件测试人员,json的基础需要掌握.这篇文章介绍Gson解析json比较常用的有2种方式,如下. Gson解析json比较常用的有2种方式: ...

  6. GSON解析JSON保存到数据库

    今天给大家带来的文章为通过Gson解析json数据并快速保存至数据库的文章.我们要保存是json对象数组,本文中的json数组并非从后台获取,为了演示,直接手动构造. 需要保存到数据库的是手机的品牌和 ...

  7. 使用Gson解析Json为Map对象探索(上)

    使用Gson解析Json为Map对象探索(上) 有些时候由于后台业务系统的不一样导致一个Json的list对象装的并非是同一种类型的对象,导致无法建立比较好的Java模型,而刚好可以利用map对象的通 ...

  8. 使用Gson解析Json为Map对象探索(下)

    使用Gson解析Json为Map对象探索(下) 下面来说说其中出现的问题 1.如何获取一个list列表 1.1首先是数据格式 1.2处理成列表的代码 com.google.gson.Gson gson ...

  9. Android--------使用gson解析json文件

    ##使用gson解析json文件 **json的格式有两种:** **1. {}类型,及数据用{}包含:** **2. []类型,即数据用[]包含:** 下面用个例子,简单的介绍gson如何解析jso ...

  10. Android利用Gson解析Json数据

    其实,要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个 ...

最新文章

  1. EJB3.0定时发送jms(发布/定阅)方式
  2. 1.1 Java注解(Annotation)简介
  3. swingbench oracle rac,使用Swingbench压力测试Oracle RAC
  4. csrf保护php,防止PHP中的CSRF
  5. (转)java中对集合对象list的几种循环访问总结
  6. zznu 1996 : 正三角形和圆的爱情
  7. GitHub+Vue自动化构建部署
  8. 知方可补不足~说说吧!timestamp有什么用?
  9. pdfjs预览pdf乱码_卓师兄pdf转换大师app下载-卓师兄pdf转换大师安卓版 v1.0.0
  10. 单行和多行文字溢出省略号显示
  11. mysql数据库练习题_50道SQL练习题及答案(MySQL版)
  12. 2021-10-18记录 MediaTek MT7620A 平台对应的类型
  13. Objective-C 协议最基本解释
  14. qq邮箱的发件服务器怎么设,如何利用QQ邮箱实现网站SMTP发信,详细邮箱的配置教程...
  15. laravel 自动验证,提示验证成功,失败信息,引入语言包
  16. Android性能优化系列篇(五):弱网优化
  17. No speakable text present at Android Studio
  18. Python 给视频添加水印源代码
  19. AE 稳定器 跟踪运动
  20. 谷歌浏览器调试vue项目

热门文章

  1. php 多人相册,精選五種 PHP 網路相簿總覽
  2. vue-cli的使用
  3. mysql查看所有存储过程,函数,视图,触发器,表
  4. 网络编程学习笔记(UDP的connect函数)
  5. XGBoost参数调优完全指南(附Python代码)——转载
  6. cNoteReadFile_C语言读取文件内容
  7. iOS正则表达式验证
  8. web touch 事件
  9. 网络爬虫Java还是Python还是c++?
  10. leetcode算法题--七进制数