JSON解析
一、什么是JSON
和XML没什么区别,都是用作数据的交互,但在与浏览器的交互中通常都用JSON,也可以用XML,不过JS对JSON的支持好很多,并且 JSON字符串比XML文档显得干净些、体积更小。
二、语法
{}:表示对象
[]:表示数组
三、解析方式
1、Gson解析
Gson:是一个简单的基于Java的库,用于将Java对象序列化为JSON,也可以把JSON转换为Java对象。它是Google开发的开源库。
为什么使用Gson:
- 标准化:Gson是由Google管理的标准化库。
- 高效:对Java标准库的可靠,快速和有效的扩展。
- 优化:库已高度优化。
- 支持泛型:为泛型提供广泛的支持。
- 支持复杂的内部类:它支持具有深继承层次结构的复杂对象。
Gson的特点:
- 易于使用:Gson API提供了一个高级外观,以简化常用用例。
- 无需创建映射:Gson API为要序列化的大多数对象提供了默认映射。
- 性能:Gson相当快并且内存占用少。它适用于大型对象或系统。
- 干净的JSON:Gson创建了干净且紧凑的JSON结果,易于阅读。
- 无依赖关系:除JDK之外,Gson库不需要任何其他库。
- 开源:Gson库是开源的;它是免费提供的。
Gson的使用:
- 【注意】:本人测试用的都是测试类,如果没有学过将方法换成main方法即可,效果一样
如果是maven工程,引入坐标即可
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
如果是普通的java项目,导入jar包即可
gson-2.8.5.jar
①将Java对象转为JSON
/**
* 将对象转为json
*/
@Test
void test1() {
//创建student对象
Student stu = new Student("1001","张三",20);
//创建Gson对象
Gson gson = new Gson();
//将对象转为json
String json = gson.toJson(stu);
//{"id":"1001","name":"张三","age":20}
System.out.println(json);
}
②将JSON转换为Java对象
/**
* 将json转为对象
*/
@Test
void test2() {
//创建Gson对象
Gson gson = new Gson();
//将json转为对象
Student student = gson.fromJson("{\"id\":\"1001\",\"name\":\"张三\",\"age\":20}", Student.class);
//Student(id=1001, name=张三, age=20)
System.out.println(student);
}
③有特殊格式的JSON数据转为集合
/**
* json中有特殊格式的数据
* {"id":"1001","name":"张三","age":20,"num":["一二三","二三四","四五六"]}
*/
@Test
void test3() {
//创建Gson对象
Gson gson = new Gson();
//将json转为map集合
Map map = gson.fromJson("{\"id\":\"1001\",\"name\":\"张三\",\"age\":20,\"num\":[\"一二三\",\"二三四\",\"四五六\"]}", Map.class);
//类型是集合 class java.util.ArrayList
System.out.println(map.get("num").getClass());
//[一二三, 二三四, 四五六]
System.out.println(map.get("num"));
}
2、FastJSON解析
FastJson是阿里巴巴的的开源库,也是用于对JSON格式的数据进行解析和打包。
特点:
- 能够支持将java bean序列化成JSON字符串,也能够将JSON字符串反序列化成Java bean。
- 速度快。
- 无其他包的依赖。
- 使用比较方便。
FastJson的使用:
如果是maven工程,引入坐标即可
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
如果是java工程,导入jar包即可
fastjson-1.2.73.jar
①将对象转为JSON
/**
* 将对象转为json
*/
@Test
void test1() {
//创建student对象
Student stu = new Student("1001","张三",20);
//将对象转为json
String jsonString = JSON.toJSONString(stu);
//{"age":20,"id":"1001","name":"张三"}
System.out.println(jsonString);
}
②将JSON转为对象
/**
* 将json转为对象
*/
@Test
void test2() {
//将json转为对象
Student stu = JSON.parseObject("{\"age\":20,\"id\":\"1001\",\"name\":\"张三\"}", Student.class);
//Student(id=1001, name=张三, age=20)
System.out.println(stu);
}
③将JSON转为集合
/**
* 将json转为集合
*/
@Test
void test3() {
//将json格式的数组转为集合
List<String> list = JSON.parseArray("[\"一二三\",\"二三四\",\"四五六\"]", String.class);
//[一二三, 二三四, 四五六]
System.out.println(list);
}