①. fastJson - 常用类
- ①. fastJson对于json格式字符串的解析主要用到了一下三个类:
- JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换
- JSONObject:fastJson提供的json对象。可以把JSONObject当成一个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的方法,方便我们对于对象属性的操作
- JSONArray:fastJson提供json数组对象,把JSONArray当做一个List,可以把JSONArray看成JSONObject对象的一个集合
此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使用JSON
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
</dependency>
②. 定义 - JSON格式
- ②. 首先定义三个json格式的字符串,作为我们的数据源
String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}";
String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
String COMPLEX_JSON_STR = "{\"teacherName\":\"crystall\",\"teacherAge\":27,\"course\":{\"courseName\":\"english\",\"code\":1270},\"students\":[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]}";
JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR);
③. 简单对象与JSON转换
- ③. json字符串-简单对象型与JSONObject之间的转换
public static void testJSONStrToJSONObject(){
JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR);
System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge"));
}
④. 数组类型与JSONArray
- ④. json字符串-数组类型与JSONArray之间的转换
public static void testJSONStrToJSONArray(){
JSONArray jsonArray = JSON.parseArray(JSON_ARRAY_STR);
for (int i = 0; i < jsonArray.size(); i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge"));
}
for (Object obj : jsonArray) {
JSONObject jsonObject = (JSONObject) obj;
System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge"));
}
}
⑤. 复杂json格式转换
- ⑤. 复杂json格式字符串与JSONObject之间的转换
public static void testComplexJSONStrToJSONObject(){
JSONObject jsonObject = JSON.parseObject(COMPLEX_JSON_STR);
String teacherName = jsonObject.getString("teacherName");
Integer teacherAge = jsonObject.getInteger("teacherAge");
JSONObject course = jsonObject.getJSONObject("course");
JSONArray students = jsonObject.getJSONArray("students");
}
⑥. JSON与javaBean转换
- ⑥. JSON格式字符串与javaBean之间的转换
@Data
public class Student {
private String studentName;
private Integer studentAge;
}
@Data
public class Course {
private String courseName;
private Integer code;
}
public class Teacher {
private String teacherName;
private Integer teacherAge;
private Course course;
private List<Student> students;
}
public static void testJSONStrToJavaBeanObj(){
Student student = JSON.parseObject(JSON_OBJ_STR, new TypeReference<Student>() {});
System.out.println(student.getStudentName()+":"+student.getStudentAge());
}
public static void testJSONStrToJavaBeanList(){
ArrayList<Student> students = JSON.parseObject(JSON_ARRAY_STR, new TypeReference<ArrayList<Student>>() {});
for (Student student : students) {
System.out.println(student.getStudentName()+":"+student.getStudentAge());
}
}
public static void testComplexJSONStrToJavaBean(){
Teacher teacher = JSON.parseObject(COMPLEX_JSON_STR, new TypeReference<Teacher>() {});
String teacherName = teacher.getTeacherName();
Integer teacherAge = teacher.getTeacherAge();
Course course = teacher.getCourse();
List<Student> students = teacher.getStudents();
}
⑦. TypeReference泛型
- ⑦. 对于TypeReference,由于其构造方法使用protected进行修饰,所以在其他包下创建其对象的时候,要用其实现类的子类:new TypeReference() {}
⑧. JSON.toJSONString的坑
- ⑧. JSON.toJSONString的坑:在使用fastjson中的JSON.toJSONString方法将对象转换成json字符串的时候,发现有些字段没有了。如:
public static void main(String[] args) {
Map<String,Object>map=new HashMap<>();
map.put("id","1");
map.put("name",null);
System.out.println(JSON.toJSONString(map));
}
public static void main(String[] args) {
Map<String,Object>map=new HashMap<>();
map.put("id","1");
map.put("name",null);
System.out.println(JSON.toJSONString(map,SerializerFeature.WriteMapNullValue));
}