博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]用Gson来解析Json数据
阅读量:4705 次
发布时间:2019-06-10

本文共 4330 字,大约阅读时间需要 14 分钟。

转自太阳尚远的博客:


在我们实际开发中像Json和XML这两种格式的数据是最常见的了,通常需要额外写一些解析工具类来解析这些数据。自己写当然可以啦,但是自己写有自己写的缺点:

  • 一是自己写的没有那么完美
  • 二是自己写解析工具非常耗时耗力,是一件吃力不讨好的事情

既然网上有那么多开源工具可用,我们又何必自己造轮子呢。

今天博主就给大家介绍一款Json解析工具Gson,相信很多小伙伴也都听过它,我就简单介绍一下它的使用。


一、引入Gson到你的项目中去

如果你使用的是eclipse的话,可以去Gson的github上去下载它的jar文件导入到你的项目中去就好了。这里附上Gson的github地址:

如果你使用的是Android Studio并且使用Gradle的话,那就更简单了,在你的build.gradle文件里添加如下语句:

dependencies {    compile 'com.google.code.gson:gson:2.4'}

这样你就把Gson引入到你的项目中去了

二、Gson的使用

将字符串数组转化成 Json 字符串

Gson gson = new Gson();String[] date {"Sun","Mon","Tus","Wes","Thes","Fri","Sat"};String dateJson = gson.toJson(date);System.out.println(dateJson);

输出结果:["Sun","Mon","Tus","Wes","Thes","Fri","Sat"]

将一个集合转化成 Json 字符串

List
students = new ArrayList<>();Students a = new Students("xiaoming", "anhui", 18);Students b = new Students("ahan", null, 19);Students c = new Students("qianfeng", "chaohu", 20);Students d = new Students("heshang", "changchun", 21);students.add(a);students.add(b);students.add(c);students.add(d);String stuJson = gson.toJson(students);System.out.println(stuJson);
//其中Students类:public class Students{    public Students(String name, String address, int age) {        this.name = name;        this.address = address;        this.age = age;    }}

输出结果:

[    {"name":"xiaoming","address":"anhui","age":18},    {"name":"ahan","age":19},    {"name":"qianfeng","address":"chaohu","age":20},    {"name":"heshang","address":"changchun","age":21}]

将一个Map集合转化成 Json 字符串

Gson gson = new Gson();HashMap
colors = new HashMap<>();colors.put("BLACK", "#000000");colors.put("BLUE", "#0234ff");colors.put("RED", "#2addbf");colors.put("YELLOW", "#123456");String colorJson = gson.toJson(colors);System.out.println(colorJson);

输出结果:{"RED":"#2addbf","BLUE":"#0234ff","BLACK":"#000000","YELLOW":"#123456"}

将一个 Json 字符串转化成 java 对象

String sJson = "{'name':'小和尚','address':'chaohu','age':22}";Students s = gson.fromJson(sJson, Students.class);String name = s.getName();String addr = s.getAddress();int age = s.getAge();System.out.println(name + " " + addr + " " + age);

输出结果:小和尚 chaohu 22

将一个 Json 字符串转化成集合

Gson gson = new Gson();Type type = new TypeToken
>() {}.getType();Map
map = gson.fromJson(colorJson, type);for (String key : map.keySet()) { System.out.println(key + ":" + map.get(key));}

输出结果:

RED:#2addbfBLUE:#0234ffBLACK:#000000YELLOW:#123456

细心的朋友可以发现,这段代码引入了一个Type类型的对象来表示Map集合的类型,注意了哦,这里导入的 Type 类是 importjava.lang.reflect.Type 中的 Type 哦。为什么要使用 TypeToken 呢?原因是由于java的泛型实现机制,使用了泛型的java代码子运行期间其类型会被擦除,我们无法获得泛型的类型,如果如果直接传入XXX.class的话,Gson很可能无法正确的解析出实际的对象。所以这里是这样写的,以后遇到这种的注意一下就行了。

以上这些都是Gson的一些基本用法。Gson不仅能将Json数据解析成Json对应的类对象,还可以将Json数据解析成封装在其他类里面的类对象。比如有如下的一个类:

public class JsonResponse{    private List
student_list; private List
teacher_list; public List
getStudentsList(){ return student_list; } public List
getTeachersList(){ return teacher_list; }}

可以看到,在JsonResponse类里面有两个实例变量,分别是Student的集合和Teacher的集合。想象一下现在你如果要从服务器请求数据,服务器返回给你的是一串Json数据,你如何将它们分别解析成Student集合和Teacher集合呢?很简单,你只需要将Student类和Teacher类都设计成与Json数据一一对应的形式,比如:

Json数据如果是这样的:

{  "student_list": [    {      "std_id": "1",      "std_name": "张三",      "std_age": "3",      "std_addr": "合肥",      "std_avatar": "./Public/Uploads/Avatar/9132035730.jpg"    },    {      "std_id": "2",      "std_name": "李四",      "std_age": "3",      "std_addr": "上海",      "std_avatar": "./Public/Uploads/Avatar/9132035730.jpg"    }  ]}

那么你的Student类就设计成这样:

public class Student{    private int std_id;    private String std_name;    private String std_age;    private String std_addr;    private String std_avatar;    //...get方法就不写了}

注意了,类中的变量名要和Json数据中的键严格一致,包括JsonResponse中的student_list也要和Json数据中开头的那一项名字一样,要不然是解析不出来的,Teacher的做法也一样。然后再将请求的数据直接转化成JsonResponse对象,Gson会根据Json数据的内容自动将其转化成List<Student>或者List<Teacher>

Gson gson = new Gson();//sJson就是上面那段Json数据JsonResponse response = gson.fromJson(sJson, JsonResponse.class);List
students = response.getStudentsList();for (Student student : students) { System.out.println(student.getStd_name());}

往往请求的数据开头可能还会有一些状态码等附加数据,这些也可以一并在JsonResonse类中解析出来。是不是很方便呢~

好啦,Gson的简单使用就介绍这么多啦,当然它还有很多其他更为高级的用法,等着小伙伴们脑洞大开了~~

转载于:https://www.cnblogs.com/yeqf/p/5235593.html

你可能感兴趣的文章
Recursion
查看>>
66. Plus One
查看>>
COMP30023 Computer Systems 2019
查看>>
CSS选择器分类
查看>>
Kali学习笔记39:SQL手工注入(1)
查看>>
C# MD5加密
查看>>
Codeforces Round #329 (Div. 2)D LCA+并查集路径压缩
查看>>
移动应用开发测试工具Bugtags集成和使用教程
查看>>
Java GC、新生代、老年代
查看>>
Liferay 6.2 改造系列之十一:默认关闭CDN动态资源
查看>>
多线程
查看>>
折线切割平面
查看>>
获取当前路径下的所有文件路径 :listFiles
查看>>
图像形态学及更通用的形态学的原理及细节汇总
查看>>
linux开启coredump的3种方法
查看>>
数据驱动之 python + requests + Excel
查看>>
lucene的两种分页操作
查看>>
jmeter配置远程负载jmeter执行性能测试
查看>>
“数学口袋精灵”App的第一个Sprint计划
查看>>
svn1.6在centos6下的使用
查看>>