目录
前言
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\"}]";//转换成JSONArrayJSONArray 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\"}]";//转换成JSONArrayList<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());}}}