最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
json数据解析工具Gson的使用详解
时间:2022-06-29 02:34:51 编辑:袖梨 来源:一聚教程网
在我们实际开发中像Json和XML这两种格式的数据是最常见的了,通常需要额外写一些解析工具类来解析这些数据。自己写当然可以啦,但是自己写有自己写的缺点:
一是自己写的没有那么完美
二是自己写解析工具非常耗时耗力,是一件吃力不讨好的事情
既然网上有那么多开源工具可用,我们又何必自己造轮子呢。
今天博主就给大家介绍一款Json解析工具Gson,相信很多小伙伴也都听过它,我就简单介绍一下它的使用。
一、引入Gson到你的项目中去
如果你使用的是eclipse的话,可以去Gson的github上去下载它的jar文件导入到你的项目中去就好了。这里附上Gson的github地址:https://github.com/google/gson
如果你使用的是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"]
将一个List集合转化成 Json 字符串:
Gson gson = new Gson();
List
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.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
Map
for (String key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
输出结果:
RED:#2addbf
BLUE:#0234ff
BLACK:#000000
YELLOW:#123456
细心的朋友可以发现,这段代码引入了一个 Type 类型的对象来表示Map集合的类型,注意了哦,这里导入的 Type 类是 java.lang.reflect.Type 中的 Type 哦。为什么要使用 TypeToken 呢?原因是由于java的泛型实现机制,使用了泛型的java代码子运行期间其类型会被擦除,我们无法获得泛型的类型,如果如果直接传入 XXX.class 的话,Gson很可能无法正确的解析出实际的对象。所以这里是这样写的,以后遇到这种的注意一下就行了。
以上这些都是Gson的一些基本用法。Gson不仅能将Json数据解析成Json对应的类对象,还可以将Json数据解析成封装在其他类里面的类对象。比如有如下的一个类:
public class JsonResponse{
private List
private List
public List
return student_list;
}
public List
return teacher_list;
}
}
可以看到,在JsonResponse类里面有两个实例变量,分别是 Student 的集合和 Teacher 的集合。想象一下现在你如果要从服务器请求数据,服务器返回给你的是一串Json数据,你如何将它们分别解析成 Student集合 和 Teacher集合 呢?很简单,你只需要将 Student 类和 Teacher 类都设计成与Json数据一一对应的形式,比如:
Json数据如果是这样的:
{
"student_list": [
{
"std_id": "1",
"std_name": "张三",
"std_age": "20",
"std_addr": "合肥",
"std_avatar": "./Public/Uploads/Avatar/9132035730.jpg"
},
{
"std_id": "2",
"std_name": "李四",
"std_age": "23",
"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
Gson gson = new Gson();
//sJson就是上面那段Json数据
JsonResponse response = gson.fromJson(sJson, JsonResponse.class);
List
for (Student student : students) {
System.out.println(student.getStd_name());
}
输出结果:
往往请求的数据开头可能还会有一些状态码等附加数据,这些也可以一并在 JsonResonse 类中解析出来。是不是很方便呢~
相关文章
- 人们熟悉的寄居蟹属于以下哪种分类 神奇海洋11月21日答案 11-21
- 第五人格11.22共研服有什么更新 11月22日共研服更新内容介绍 11-21
- 原神恰斯卡怎么培养 11-21
- 无期迷途四星装束是谁 11-21
- 王者荣耀帝丹高中校服怎么获得 11-21
- 光遇姆明季后续版本怎么玩 11-21