FastJson QuickStart
一、简介
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象,它可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象
源码地址:https://github.com/alibaba/fastjson
中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
二、使用
(1) 引入依赖
maven仓库地址:https://mvnrepository.com/search?q=fastjson
com.alibaba
fastjson
x.x.x
(2) @JSONField
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface JSONField {
int ordinal() default 0;// 序列
String name() default "";// 名称?
String format() default "";// 格式化
boolean serialize() default true;// 序列化
boolean deserialize() default true;// 反序列化
SerializerFeature[] serialzeFeatures() default {};
Feature[] parseFeatures() default {};
String label() default "";
boolean jsonDirect() default false;
Class> serializeUsing() default Void.class;
Class> deserializeUsing() default Void.class;
String[] alternateNames() default {};
boolean unwrapped() default false;
String defaultValue() default "";
}
1. 作用对象
- Field
- Setter 和 Getter 方法
FastJson 在进行操作时,是根据 getter 和 setter 的方法进行的,并不是依据 Field 进行
若属性是私有的,必须有 set 方法,否则无法反序列化
2. ordinal - 序列
数字越小,排行越前,默认为0
@JSONField(ordinal = 3)
private int age;
3. name - 名称
转化为JSON格式字符串后,属性值的内容
@JSONField(name = "FULL NAME")
private String fullName;
4. format - 日期格式化
@JSONField(format="yyyy-MM-dd HH:mm:ss")
public Date date;
5. serialize - 序列化
@JSONField(serialize=false)
public Date date;
指定某个属性是否进行序列化
序列化:此处指由JavaBean ➡ JSON格式字符串
6. deserialize 反序列化
@JSONField(deserialize=false)
public Date date;
指定某个属性是否进行反序列化
反序列化:此处指由JSON格式字符串 ➡ JavaBean
必须存在getter + setter方法
public class Example {
private List listOfPersons = new ArrayList();
@Before
public void setUp() {
listOfPersons.add(new Person(15, "John Doe", new Date()));
listOfPersons.add(new Person(20, "Janette Doe", new Date()));
}
@Test
public void whenJavaList_thanConvertToJsonCorrect() {
String jsonOutput= JSON.toJSONString(listOfPersons);
System.out.println(jsonOutput);
}
}
==输出结果==
[{
"FULL NAME": "John Doe",
"dateOfBirth": "2020-08-05 20:15:32",
"age": 15
}, {
"FULL NAME": "Janette Doe",
"dateOfBirth": "2020-08-05 20:15:32",
"age": 20
}]
三、相互转换
实体类
public class TbUser {
private Long id;
private String username;
private String password;
private String phone;
private Date created;
// 有参构造 + 无参构造
// getter + setter
// toString()
}
(1) JaveBean ➡ JsonStr
String jsonstr = JSON.toJSONString(T t);
// java对象转json字符串
@Test
public void beanTojson() {
// 1.创建一个java对象
TbUser user = new TbUser(1l, "zhangsan", "123", "13766669999", new Date());
// 2.转换为jsonstr
String jsonstr = JSON.toJSONString(user);
System.out.println(jsonstr);
}
// java对象数组转json字符串
@Test
public void beanArrayTojson() {
// 1.创建一个java对象
TbUser userOne = new TbUser(1l, "zhangsan", "123", "13766669999", new Date());
TbUser userTwo = new TbUser(2l, "lisi", "1234", "13766669999", new Date());
List users = new ArrayList();
users.add(userOne);
users.add(userTwo);
// 2.转换为jsonstr
String jsonstr = JSON.toJSONString(users);
System.out.println(jsonstr);
}
运行结果:
{"created":1597288890276,"id":1,"password":"123","phone":"13766669999","username":"zhangsan"}
---------------------------------------------------------------------------------------------
[{"created":1597289361351,"id":1,"password":"123","phone":"13766669999","username":"zhangsan"},{"created":1597289361351,"id":2,"password":"1234","phone":"13766669999","username":"lisi"}]
(2) JaveBean ➡ Json对象
JSONObject jsonObject = (JSONObject) JSON.toJSON(T t);
JSONArray jsonArray = (JSONArray) JSON.toJSON(T t);
// java对象数组转json对象
@Test
public void beanTojsonObject() {
TbUser userOne = new TbUser(1l, "zhangsan", "123", "13766669999", new Date());
JSONObject jsonObject = (JSONObject) JSON.toJSON(userOne);
System.out.println(jsonObject);
}
// java对象数组转json对象
@Test
public void beanTojsonArray() {
// 1.创建一个java对象
TbUser userOne = new TbUser(1l, "zhangsan", "123", "13766669999", new Date());
TbUser userTwo = new TbUser(2l, "lisi", "1234", "13766669999", new Date());
List users = new ArrayList();
users.add(userOne);
users.add(userTwo);
JSONArray jsonArray = (JSONArray) JSON.toJSON(users);
System.out.println(jsonArray);
}
运行结果:
{"password":"123","phone":"13766669999","created":1597290327613,"id":1,"username":"zhangsan"}
---------------------------------------------------------------------------------------------
[{"password":"123","phone":"13766669999","created":1597290349668,"id":1,"username":"zhangsan"},{"password":"1234","phone":"13766669999","created":1597290349668,"id":2,"username":"lisi"}]
(3) JsonStr ➡ JaveBean
T t = JSON.parseObject(String jsonStr, Class
List
// json字符串转java对象
@Test
public void jsonStrtobean() {
String jsonStr = "{\"password\":\"123\",\"phone\":\"13766669999\",\"created\":1597290327613,\"id\":1,\"username\":\"zhangsan\"}";
TbUser user = JSON.parseObject(jsonStr, TbUser.class);
System.out.println(user);
}
// json字符串转java对象数组
@Test
public void jsonStrtobeanArray() {
String jsonStr = "[{\"password\":\"123\",\"phone\":\"13766669999\",\"created\":1597290349668,\"id\":1,\"username\":\"zhangsan\"},{\"password\":\"1234\",\"phone\":\"13766669999\",\"created\":1597290349668,\"id\":2,\"username\":\"lisi\"}]";
List users = JSON.parseArray(jsonStr, TbUser.class);
System.out.println(users);
}
运行结果:
TbUser{id=1, username='zhangsan', password='123', phone='13766669999', created=Thu Aug 13 11:45:27 CST 2020}
---------------------------------------------------------------------------------------------
[TbUser{id=1, username='zhangsan', password='123', phone='13766669999', created=Thu Aug 13 11:45:49 CST 2020}, TbUser{id=2, username='lisi', password='1234', phone='13766669999', created=Thu Aug 13 11:45:49 CST 2020}]
(4) JsonStr ➡ Json对象
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
JSONArray jsonArray = JSONArray.parseArray(jsonStr);
// json字符串转json对象
@Test
public void jsonStrtojsonObject() {
String jsonStr = "{\"password\":\"123\",\"phone\":\"13766669999\",\"created\":1597290327613,\"id\":1,\"username\":\"zhangsan\"}";
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
System.out.println(jsonObject);
}
// json字符串转json对象数组
@Test
public void jsonStrtojsonArray() {
String jsonStr = "[{\"password\":\"123\",\"phone\":\"13766669999\",\"created\":1597290349668,\"id\":1,\"username\":\"zhangsan\"},{\"password\":\"1234\",\"phone\":\"13766669999\",\"created\":1597290349668,\"id\":2,\"username\":\"lisi\"}]";
JSONArray jsonArray = JSONArray.parseArray(jsonStr);
System.out.println(jsonArray);
}
(5) Json对象 ➡ JavaBean
List
(6) Json对象 ➡ JavaStr
String jsonString = jsonObject.toJSONString();
String jsonString = jsonArray.toJSONString();
参考内容地址:https://www.runoob.com/w3cnote/fastjson-intro.html