Json和FastJson的使用
前言
今儿来总结一下JSON还有其解析工具,解析工具有好几种,初学掌握一种就可以了,容易混
一、JSON是什么?
1.概念
JSON(JavaScript Object Notation) 指的是 JavaScript表示’对象’的格式
2.下面说明俩个问题
一、json字符串和Java字符串的区别?
JSON字符串和Java字符串本质上是没有区别的,JSON字符串就是JAVA字符串,只不过是JSON格式的字符串
二、JSON的俩大类型:JSON对象,JSON数组 (都是键值对的形式)
1. JSON对象:用{ }表示
eg:{“score”:100,“sex”:“男”,“name”:“张三”,“age”:12}
2. JSON数组:用 [ ] 表示,由多个json对象组成,
eg:[{“score”:100,“sex”:“男”,“name”:“张三”,"age"12},{“score”:100,“sex”:“男”,“name”:“李四”,“age”:12}]
3.复杂点的:JSON对象+JSON数组
{“score”:10,“subject”:[{“subjectNum”:“001”,“subjectName”:“语文”},{“subjectNum”:“002”,“subjectName”:“数学”}],“sex”:“男”,“name”:“张三”,“age”:12}
二、使用步骤
1.引入依赖
<!-- fastjson的依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.44</version>
</dependency>
2.实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Subject {
private String subjectName;
private String subjectNum;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String name;
private Integer age;
private char sex;
private Integer score;
private List<Subject> subject;
}
3.测试(详解FastJson)
字符串与Json对象的相互转化
- 字符串转Json对象( 反序列化 )JSONObject.parseObject(str)
- Json对象转字符串( 序列化 ) JSONObject.toJSONString(obj)
public void jsonStringToJsonObject(){
// 字符串转json对象 结果:{"score":100,"sex":"男","name":"张三","age":12}
String zhangSanString = "{\"score\":100,\"sex\":\"男\",\"name\":\"张三\",\"age\":12}";
JSONObject zhangSanJsonObject = JSONObject.parseObject(zhangSanString);
System.out.println(zhangSanJsonObject);
// json对象转字符串 结果:{"score":100,"sex":"男","name":"张三","age":12}
String zhangSanJsonString = JSONObject.toJSONString(zhangSanJsonObject);
System.out.println(zhangSanJsonString);
}
实体类与Json的转化
- JSon转实体类
JSONObject.toJavaObject(JsonObj, Student.class);
JSONObject.parseObject(JsonStr, Student.class);
JSONObject.parseObject(JsonStr, new TypeReference< Student >() {});- 实体类转JSon JSONObject.toJSON(JavaObj)
注意:反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常:
/**
* 实体类与Json的转化
*/
@Test
public void JsonObjTOJavaObj(){
Student student = new Student("张三", 12, '男', 10,null);
// Java对象转化Json对象 结果:{"score":100,"sex":"男","name":"张三","age":12}
JSONObject studentJsonObject = (JSONObject) JSONObject.toJSON(student);
System.out.println(studentJsonObject);
// json对象转Java对象
// 方式一:结果:Student(name=张三, age=12, sex=男, score=100, subject=null)
Student student1 = JSONObject.toJavaObject(studentJsonObject, Student.class);
System.out.println(student1);
// 方式二:相当于:json对象->json字符串->Java对象 结果:Student(name=张三, age=12, sex=男, score=100, subject=null)
Student student2 = JSONObject.parseObject(String.valueOf(studentJsonObject), Student.class);
System.out.println(student2);
// 方式三:结果:Student(name=张三, age=12, sex=男, score=100, subject=null)
Student student3 = JSONObject.parseObject(String.valueOf(studentJsonObject), new TypeReference<Student>() {
});
System.out.println(student3);
}
下面介绍复杂格式的JSON情况,
- 实体类转复杂格式的JSON
- JsonObject转化为JsonArrary (主要看这种)
- 将JsonArray转化为List
/**
* 复杂JSON格式:
* 实体类转JSONObject
* JsonObject转化为JsonArrary(主要)
* 将JsonArray转化为List
*/
@Test
public void pojoToJson(){
ArrayList<Subject> subjects = new ArrayList<>();
subjects.add(new Subject("语文","001"));
subjects.add(new Subject("数学","002"));
Student zhangSan = new Student("张三", 12, '男', 10,subjects);
// 实体类转JSONObject
// 结果:{"score":10,"subject":[{"subjectNum":"001","subjectName":"语文"},{"subjectNum":"002","subjectName":"数学"}],"sex":"男","name":"张三","age":12}
JSONObject zhangSanJsonObj = (JSONObject) JSONObject.toJSON(zhangSan);
System.out.println(zhangSanJsonObj);
// JsonObject转化为JsonArrary
JSONArray subjectArray = zhangSanJsonObj.getJSONArray("subject");
// 将JsonArray转化为List
// 结果:Subject(subjectName=语文, subjectNum=001) Subject(subjectName=数学, subjectNum=002)
List<Subject> subject =JSONObject.parseArray(subjectArray.toJSONString(), Subject.class);
for (Subject s : subject) {
System.out.println(s);
}
}
三、还是看不懂,推荐下面2篇博客
使用FastJson对JSON字符串、JSON对象及JavaBean之间的相互转换
json的处理之FastJson的处理