目录
前言
JSON 的数据类型
Java 解析 JSON
常用于解析 JSON 的第三方库
Jackson
Gson
Fastjson
使用 Fastjson
Fastjson 的优点
Fastjson 的主要对象
JSON 接口
JSONObject 类
JSONArray 类
前言
1W:什么是JSON?
JSON 指 JavaScrip t对象表示法(JavaScript Object Notation);
JSON 是一种轻量级的数据交换格式;
它基于 ECMAScript(European Computer Manufacturers Association,欧洲计算机协会制定的 JavaScript 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据;
2W:为什么使用JSON?
JSON 作为数据传输在浏览器端非常方便;
JSON 只允许使用 UTF-8 编码,不存在编码问题;
JSON 在语法上与 JavaScript 创建对象相同,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScirpt 对象;
绝大多数 REST API 都选择 JSON 作为数据传输格式;
3W:JSON如何使用?
JSON 的实例,如下面代码所示
{ "student":[ {"name":"关山岳","age":18}, {"name":"宏满江","age":20} ] }
使用大括号 { } 保存对象,每个对象由若干数据组成
每个数据由 key:value 键值对组成
数据之间使用逗号 ,分隔
使用 \ 进行特殊字符的转义
使用中括号 [ ] 保存数组(集合),数组(集合)可以包含多个对象
JSON 的数据类型
-
数字(整数与浮点数)
-
字符串(在双引号 " "中)
-
逻辑值(true | false)
-
数组(在中括号 [ ] 中)
-
对象(在大括号 { } 中)
-
null
Java 解析 JSON
需求:Java 对象与 JSON 格式的数据之间的相互转换
常用于解析 JSON 的第三方库
-
Jackson
maven 中央仓库:
jackson.jarhttps://repo1.maven.org/maven2/org/codehaus/jackson/jackson-core-asl/1.9.13/
Jackson 的依赖坐标:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
-
Gson
maven 中央仓库:
gson.jarhttps://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.5/
Gson 的依赖坐标:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
-
Fastjson
maven 中央仓库:
fastjson.jarhttps://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.25/
Fastjson 的依赖坐标:
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.25</version>
</dependency>
使用 Fastjson
Fastjson 是阿里巴巴开源 JSON 解析库,可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean
Fastjson 的优点
-
速度快:Fastjson 相对其他 JSON 库的特点是快,从2011年 fastjson 发布1.1.x版本之后,其性能从未被其他Java实现的 JSON 超越;
-
使用广泛:Fastjson 在阿里巴巴大规模使用,在数万台服务器上部署,fastjson 在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一;
-
测试完备:Fastjson 有非常多的 testcase,在1.2.11版本中,testcase 超过3321个。每次发布都会进行回归测试,保证质量稳定;
-
使用简单:Fastjson 的 API 十分简洁;
-
功能完备:支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展;
Fastjson 的主要对象
Fastjson 主要使用 JSON 接口,JSONObject 类、JSONArray 类;
-
JSON 接口:提供 json 解析操作的入口方法,用于原始转换;
-
JSONObject 类:封装 json 格式的对象;
-
JSONArray 类:封装 json 格式的集合;
JSON 接口
JSON 接口的主要作用:
-
将 Java 对象序列化为 JSON 字符串
-
将 JSON 字符串反序列化为 Java 对象
JSON.toJSONString(Object object):将Java对象序列化为JSON字符串
package com.ape.app;
import com.alibaba.fastjson2.JSON;
import com.ape.bean.Student;
/**
* @author MitsueHong
* @version 1.0
* @since 2024/3/7
*/
public class TestJson {
public static void main(String[] args) {
//实例化对象
Student student = new Student();
student.setStu_name("关中雪");
student.setStu_sex(1);
student.setStu_age(22);
//转换为json格式的字符串
String stuJson = JSON.toJSONString(student);
System.out.println(stuJson);
}
}
JSON.parseObject(String text):将 JSON 字符串反序列化为 Java 对象
package com.ape.app;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ape.bean.Student;
/**
* @author MitsueHong
* @version 1.0
* @since 2024/3/7
*/
public class TestJson {
public static void main(String[] args) {
//json格式数据
String jsonStr ="{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}";
//转换为java对象
JSONObject jsonObject = JSON.parseObject(jsonStr);
System.out.println("名称:"+jsonObject.getString("stu_name"));
System.out.println("性别:"+jsonObject.getString("stu_sex"));
System.out.println("年龄:"+jsonObject.getString("stu_age"));
}
}
JSON.parseArray(String text):将 JSON 字符串反序列化为 JSONArray 集合数组
package com.ape.app;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
/**
* @author MitsueHong
* @version 1.0
* @since 2024/3/7
*/
public class TestJson {
public static void main(String[] args) {
//json格式数据
String jsonStr ="[{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}," +
"{\"stu_name\":\"凯楠印象\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}," +
"{\"stu_name\":\"陈安\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}]";
//转换成JSONArray
JSONArray jsonArray = JSON.parseArray(jsonStr);
for(int i=0;i<jsonArray.size();i++) {
JSONObject object = jsonArray.getJSONObject(i);
System.out.println(object);
}
}
}
JSONObject 类
JSONObject 类主要用于封装 key-value 键值对数据,它继承自 LinkedHashMap 接口,所以对它的理解和使用,可以参考 Map 集合。
常用方法:
-
getString(String key)
-
remove(Object key)
JSON.parseObject(String text,Class<T> objectClass)
//json格式数据
String jsonStr ="{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}";
//转换为java对象
Student student = JSON.parseObject(jsonStr,Student.class);
System.out.println("名称:"+student.getStu_name());
System.out.println("性别:"+student.getStu_sex());
System.out.println("年龄:"+student.getStu_age());
JSONArray 类
JSONArray 是 JSON 数组,JSON 数组对象中存储的是若干个 JSONObject 对象,所以类中的方法主要用于直接操作 JSONObject 对象,主要用于封装数组集合类的数据,继承自 ArrayList 类。
常用方法:getJSONObject(int index)
JSON.parseArray(String text,Class<T> objectClass)
//json格式数据
String jsonStr ="[{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}," +
"{\"stu_name\":\"凯楠印象\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}," +
"{\"stu_name\":\"陈安\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}]";
//转换成JSONArray
List<Student> studentList = JSON.parseArray(jsonStr,Student.class);
for(Student stu : studentList) {
System.out.println("姓名:"+ stu.getStu_name());
System.out.println("性别:"+ stu.getStu_sex());
System.out.println("年龄:"+ stu.getStu_age());
}
}
}