从书呆子变成读书人,再从读书人变成知识分子。
Fastjson简介
Fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自
阿里巴巴
的工程师开发,是目前Java语言中
最快
的JSON库。Fastjson
简单易用
,已经
被广泛使用
在协议交互、Web网站、Android客户端等多种应用场景。
简言之:
Fastjson是一个 Java 库,可以将 Java 对象转换为 JSON 格式或者将 JSON 字符串转换为 Java 对象 |
(看图标就知道有多快了)
使用准备
JavaWeb工程
1.JavaWeb工程的话,
在工程目录下新建lib目录,再复制jar包到lib目录下
。
若是没有Fastjson的jar包的话,通过下方的链接去我的百度网盘里下载即可。
链接:
https://pan.baidu.com/s/1CHTuqpsTmtaK4ZeIneJlUg
提取码:ch5y
复制这段内容后打开百度网盘手机App,操作更方便哦
2.添加jar包,右键点击jar包,找到“Add as Library…” -> “OK”。
Maven工程
若是Maven工程的话,找到pom.xml文件,直接添加依赖即可。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.33</version>
</dependency>
实战演练
我们打开Fast-json包,查看源码可以发现里面所有的方法都是静态方法,
可以用类名直接调用,即JSON.method()形式调用;
我们先创建一个名为“Person”的类:
/**
* @author guqueyue
* @Date 2020/4/4
**/
public class Person {
public String name;
public int age;
}
注意:当涉及到JSON转换成Java对象时:
-
JSON中属性必须和Java对象中属性保持一致
-
方法中有一个参数必定为
反射对象
JSON(对象)字符串、JSON对象、Java对象之间的互相转换
转换图如下:
JSON字符串 -> JSON、Java对象:
String jsonString = "{name:'张总', age:18}";
JSONObject jsonObject = JSON.parseObject(jsonString);
Person person = JSON.parseObject(jsonString, Person.class);
JSON、Java对象 -> JSON字符串:
String jsonString1 = JSON.toJSONString(jsonObject);
String ObjectString = JSON.toJSONString(person);
JSON对象 -> Java对象:
var jsonObject = {name:"张总", age:18}; // Java中只能声明字符串再转换成JSON对象
Person person1 = JSON.toJavaObject(jsonObject, Person.class);
Java对象 -> JSON对象:
Person person2 = new Person();
person2.age = 11;
person2.name = "小飞侠";
JSONObject jsonObject1 = (JSONObject) JSON.toJSON(person2); // 强转
JSON(数组)字符串、JSON数组、Java集合之间的互相转换
转换图如下:
JSON字符串 -> JSON数组、Java集合:
String jsonString = "[{name:'吕总', age: 18}, {name:'张佬', age:19}]";
JSONArray jsonArray = JSON.parseArray(jsonString);
List<Person> personList = JSON.parseArray(jsonString, Person.class);
JSON数组、Java集合-> JSON字符串:
String jsonString1 = JSON.toJSONString(jsonArray);
String listString = JSON.toJSONString(personList);
Java集合 -> JSON数组:
JSONArray jsonArray1 = (JSONArray) JSON.toJSON(personList);
JSON数组 -> Java集合:
不能直接转,必须走绿色通道:
JSON数组 -> JSON字符串 -> Java集合
String arrayString = JSON.toJSONString(jsonArray1);
List<Person> personList1 = JSON.parseArray(arrayString, Person.class);
转换总图
扩展延伸
从Java集合中获取Java对象或者说从Java对象中取值,有一定Java基础的人都会,这里就不加赘述
此处演示的是:
-
从JSON对象中取值 -
从JSON数组中取出JSON对象 -
如何快速从JOSN数组取出Java对象
从JSON对象中取值:
//DataType是key所对应value的数据类型
JsonObjectName.getDataType("key");
代码示例:
/**
* @author guqueyue
* @Date 2020/4/7
* 从JSON对象中取值演示
**/
public class JSONTest {
public static void main(String[] args) {
// 声明并赋值JSON字符串
String jsonString = "{'name':'熊大', age:6}";
// JSON字符串转换成JSON对象
JSONObject jsonObject = JSON.parseObject(jsonString);
// 分别取出name、age所对应的值
String name = jsonObject.getString("name");
int age = jsonObject.getInteger("age");
// 打印到控制台
System.out.println("name:" + name + ", age:" + age);
}
}
Output:
从JSON数组中取出JSON对象:
jsonArrayName.getJSONObject(index); // index表示数组的索引
代码示例:
/**
* @author guqueyue
* @Date 2020/4/7
* 从JSON数组中取出JSON对象演示
**/
public class JSONTest2 {
public static void main(String[] args) {
// 声明JSON数组字符串并赋值
String jsonString = "[{'name':'熊大', 'age':6}, {'name':'熊二', 'age':7}]";
// 将JSON数组字符串解析成JSON数组
JSONArray jsonArray = JSON.parseArray(jsonString);
// 获取JSON数组长度
int size = jsonArray.size();
// 遍历JSON数组
for (int i = 0; i < size; i++) {
// 根据索引获取JSON对象
JSONObject jsonObject = jsonArray.getJSONObject(i);
// 将JSON对象打印到控制台
System.out.println(jsonObject);
}
}
}
Output:
将JOSN数组转换成Java对象:
一般大家很可能很容易想到的思路:JSON数组 -> JSON对象 -> Java对象
但是其实是可以直接取的:JSON数组 -> Java对象
// index为数组索引,Object.class为需要转换Java对象的反射对象
jsonArrayName.getObject(index, Object.class);
首先创建一个Java类,方便转换:
import lombok.Data;
/**
* @author guqueyue
* @Date 2020/4/7
**/
@Data //lombok插件的注解,若是没有用lombok插件,请自行生成getter、setter方法
public class Person {
private String name;
private String age;
}
代码示例:
/**
* @author guqueyue
* @Date 2020/4/7
* 从JSON数组中直接取出Java对象演示
**/
public class TestJSON {
public static void main(String[] args) {
// 声明JSON字符串并赋值
String jsonString = "[{'name':'张三', 'age':11}, {'name':'李四', 'age':13}]";
// 将JSON字符串转换成JSON数组
JSONArray jsonArray = JSON.parseArray(jsonString);
// 遍历JSON数组
for (int i = 0; i < jsonArray.size(); i++) {
// 根据索引,从JSON数组中直接取出Java对象
Person person = jsonArray.getObject(i, Person.class);
// 打印到控制台
System.out.println(person);
}
}
}
完事,Output: