java fastjosn使用

1. 使用fastjson需要的依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.60</version>
</dependency>

 

2. 对象与json转换关系

3. fastjson常用方法基本使用

 先准备自定义类

package com.ggh.study;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class People {
    private String idCard; //身份证号

    public People() {
    }

    public People(String idCard) {
        this.idCard = idCard;
    }

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    @Override
    public String toString() {
        return "People{" +
                "idCard=" + (idCard==null?"":'\'') + idCard + (idCard==null?"":'\'') +
                '}';
    }
}

class Student extends People{
    private Integer id;
    private String name;
    private Boolean isMen;
    private Integer age;
    private String email;
    private Date birthday;

    public Student() {
    }

    public Student(Integer id, String name, Boolean isMen, Integer age, String email, Date birthday) {
        this.id = id;
        this.name = name;
        this.isMen = isMen;
        this.age = age;
        this.email = email;
        this.birthday = birthday;
    }

    public Student(String idCard, Integer id, String name, Boolean isMen, Integer age, String email, Date birthday) {
        super(idCard);
        this.id = id;
        this.name = name;
        this.isMen = isMen;
        this.age = age;
        this.email = email;
        this.birthday = birthday;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Boolean getMen() {
        return isMen;
    }

    public void setMen(Boolean men) {
        isMen = men;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Student{" +
                super.toString() +
                ", id=" + id +
                ", name=" + (name==null?"":'\'') + name + (name==null?"":'\'') +
                ", isMen=" + isMen +
                ", age=" + age +
                ", email=" + (email==null?"":'\'') + email + (email==null?"":'\'') +
                ", birthday=" + (birthday==null?"":'\'') + birthday + (birthday==null?"":'\'') +
                '}';
    }
}

class Teacher extends People{
    private Integer id;
    private String name;
    private Integer age;
    private Student myChild; //我的孩子
    private String[] advantage; //优点
    private List<Student> taughtStudentList; //教过的学生
    private Map<String, Student> intimacyMap; //与各学生的亲密等级

    public Teacher() {
    }

    public Teacher(Integer id, String name, Integer age, Student myChild, String[] advantage, List<Student> taughtStudentList, Map<String, Student> intimacyMap) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.myChild = myChild;
        this.advantage = advantage;
        this.taughtStudentList = taughtStudentList;
        this.intimacyMap = intimacyMap;
    }

    public Teacher(String idCard, Integer id, String name, Integer age, Student myChild, String[] advantage, List<Student> taughtStudentList, Map<String, Student> intimacyMap) {
        super(idCard);
        this.id = id;
        this.name = name;
        this.age = age;
        this.myChild = myChild;
        this.advantage = advantage;
        this.taughtStudentList = taughtStudentList;
        this.intimacyMap = intimacyMap;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Student getMyChild() {
        return myChild;
    }

    public void setMyChild(Student myChild) {
        this.myChild = myChild;
    }

    public String[] getAdvantage() {
        return advantage;
    }

    public void setAdvantage(String[] advantage) {
        this.advantage = advantage;
    }

    public List<Student> getTaughtStudentList() {
        return taughtStudentList;
    }

    public void setTaughtStudentList(List<Student> taughtStudentList) {
        this.taughtStudentList = taughtStudentList;
    }

    public Map<String, Student> getIntimacyMap() {
        return intimacyMap;
    }

    public void setIntimacyMap(Map<String, Student> intimacyMap) {
        this.intimacyMap = intimacyMap;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", name=" + (name==null?"":'\'') + name + (name==null?"":'\'') +
                ", age=" + age +
                ", myChild=" + myChild +
                ", advantage=" + Arrays.toString(advantage) +
                ", taughtStudentList=" + taughtStudentList +
                ", intimacyMap=" + intimacyMap +
                '}';
    }
}

 

3.1. java对象 与 json字符串 互转

package com.ggh.study;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FastJsonStudy1 {
    public static void main(String[] args) {
        Student javaObject1 = new Student("915825095613202836",1,"李小龙",true,25,"lixiaolong@qq.com",new Date(1656210000000L));

        Student javaObject2 = new Student("985025033313262858",2,"李嘉诚",true,100,"4848438@qq.com",new Date(1656220000000L));

        Student javaObject3 = new Student("912655095693206526",3,"你叉叉",null,333,"nixx@qq.com",new Date(1656230000000L));

        List<Student> list1 = new ArrayList<Student>();
        Collections.addAll(list1,javaObject1,javaObject2,javaObject3);

        Map<String,Student> map1 = new HashMap<String, Student>();
        map1.put("key1",javaObject1);
        map1.put("key2",javaObject2);
        map1.put("key3",javaObject3);

        Teacher JavaObject4 = new Teacher("915964265816522636",1,"孔子",99,javaObject1,new String[]{"李小龙","李嘉诚","你叉叉"},list1,map1);


        /*自定义简单java对象 与 JSON字符串 正反序列化*/

        // {"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"}
        String jsonString1 = JSON.toJSONString(javaObject1);
        // Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Thu Jan 01 08:00:11 CST 1970'}
        String jsonString01 = "{\"age\":25,\"birthday\":1656210000000,\"email\":\"lixiaolong@qq.com\",\"id\":1,\"idCard\":\"915825095613202836\",\"men\":true,\"name\":\"李小龙\"}";
        // Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'}
        Student javaObject01 = JSON.parseObject(jsonString01, Student.class);


        /*Map对象 与 JSON字符串 正反序列化*/

        // {"key1":{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // "key2":{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // "key3":{"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}}
        String jsonString2 = JSON.toJSONString(map1);

        // {"key1":{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // "key2":{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // "key3":{"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}}
        String jsonString02 = "{\"key1\":{\"age\":25,\"birthday\":1656210000000,\"email\":\"lixiaolong@qq.com\",\"id\":1,\"idCard\":\"915825095613202836\",\"men\":true,\"name\":\"李小龙\"}," +
                              "\"key2\":{\"age\":100,\"birthday\":1656220000000,\"email\":\"4848438@qq.com\",\"id\":2,\"idCard\":\"985025033313262858\",\"men\":true,\"name\":\"李嘉诚\"}," +
                              "\"key3\":{\"age\":333,\"birthday\":1656230000000,\"email\":\"nixx@qq.com\",\"id\":3,\"idCard\":\"912655095693206526\",\"name\":\"你叉叉\"}}";
        // {key1=Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'},
        // key2=Student{People{idCard='985025033313262858'}, id=2, name='李嘉诚', isMen=true, age=100, email='4848438@qq.com', birthday='Sun Jun 26 13:06:40 CST 2022'},
        // key3=Student{People{idCard='912655095693206526'}, id=3, name='你叉叉', isMen=null, age=333, email='nixx@qq.com', birthday='Sun Jun 26 15:53:20 CST 2022'}}
        Map<String,Student> map01 = JSON.parseObject(jsonString02, new TypeReference<Map<String,Student>>() {});


        /*List对象 与 JSON字符串 正反序列化*/

        // [{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // {"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // {"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}]
        String jsonString3 = JSON.toJSONString(list1);

        // [{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // {"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // {"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}]
        String jsonString03 = "[{\"age\":25,\"birthday\":1656210000000,\"email\":\"lixiaolong@qq.com\",\"id\":1,\"idCard\":\"915825095613202836\",\"men\":true,\"name\":\"李小龙\"}," +
                               "{\"age\":100,\"birthday\":1656220000000,\"email\":\"4848438@qq.com\",\"id\":2,\"idCard\":\"985025033313262858\",\"men\":true,\"name\":\"李嘉诚\"}," +
                               "{\"age\":333,\"birthday\":1656230000000,\"email\":\"nixx@qq.com\",\"id\":3,\"idCard\":\"912655095693206526\",\"name\":\"你叉叉\"}]";
        // [Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'},
        // Student{People{idCard='985025033313262858'}, id=2, name='李嘉诚', isMen=true, age=100, email='4848438@qq.com', birthday='Sun Jun 26 13:06:40 CST 2022'},
        // Student{People{idCard='912655095693206526'}, id=3, name='你叉叉', isMen=null, age=333, email='nixx@qq.com', birthday='Sun Jun 26 15:53:20 CST 2022'}]
        List<Student> list01 = JSON.parseArray(jsonString03, Student.class);
        // [Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'},
        // Student{People{idCard='985025033313262858'}, id=2, name='李嘉诚', isMen=true, age=100, email='4848438@qq.com', birthday='Sun Jun 26 13:06:40 CST 2022'},
        // Student{People{idCard='912655095693206526'}, id=3, name='你叉叉', isMen=null, age=333, email='nixx@qq.com', birthday='Sun Jun 26 15:53:20 CST 2022'}]
        List<Student> list001 = JSON.parseObject(jsonString03, new TypeReference<List<Student>>() {});


        /*复杂java对象 与 JSON子字符串 正反序列化*/

        // {"advantage":["李小龙","李嘉诚","你叉叉"],"age":99,"id":1,"idCard":"915964265816522636",
        // "intimacyMap":
        // {"key1":{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // "key2":{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // "key3":{"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}},
        // "myChild":
        // {"$ref":"$.intimacyMap.key1"},
        // "name":"孔子",
        // "taughtStudentList":
        // [{"$ref":"$.intimacyMap.key1"},
        // {"$ref":"$.intimacyMap.key2"},
        // {"$ref":"$.intimacyMap.key3"}]}
        String jsonString4 = JSON.toJSONString(JavaObject4);

        // {"advantage":["李小龙","李嘉诚","你叉叉"],
        // "age":99,
        // "id":1,
        // "idCard":"915964265816522636",
        // "intimacyMap":
        // {"key1":{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // "key2":{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // "key3":{"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}},
        // "myChild":{"$ref":"$.intimacyMap.key1"},
        // "name":"孔子",
        // "taughtStudentList":
        // [{"$ref":"$.intimacyMap.key1"},{"$ref":"$.intimacyMap.key2"},{"$ref":"$.intimacyMap.key3"}]}
        String jsonString04 = "{\"advantage\":[\"李小龙\",\"李嘉诚\",\"你叉叉\"]," +
                               "\"age\":99," +
                               "\"id\":1," +
                               "\"idCard\":\"915964265816522636\"," +
                               "\"intimacyMap\":" +
                               "{\"key1\":{\"age\":25,\"birthday\":1656210000000,\"email\":\"lixiaolong@qq.com\",\"id\":1,\"idCard\":\"915825095613202836\",\"men\":true,\"name\":\"李小龙\"}," +
                               "\"key2\":{\"age\":100,\"birthday\":1656220000000,\"email\":\"4848438@qq.com\",\"id\":2,\"idCard\":\"985025033313262858\",\"men\":true,\"name\":\"李嘉诚\"}," +
                               "\"key3\":{\"age\":333,\"birthday\":1656230000000,\"email\":\"nixx@qq.com\",\"id\":3,\"idCard\":\"912655095693206526\",\"name\":\"你叉叉\"}}," +
                               "\"myChild\":{\"$ref\":\"$.intimacyMap.key1\"}," +
                               "\"name\":\"孔子\"," +
                               "\"taughtStudentList\":" +
                               "[{\"$ref\":\"$.intimacyMap.key1\"},{\"$ref\":\"$.intimacyMap.key2\"},{\"$ref\":\"$.intimacyMap.key3\"}]}";
        // Teacher{id=1,
        // name='孔子',
        // age=99,
        // myChild=Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'},
        // advantage=[李小龙, 李嘉诚, 你叉叉],
        // taughtStudentList=
        // [Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'},
        // Student{People{idCard='985025033313262858'}, id=2, name='李嘉诚', isMen=true, age=100, email='4848438@qq.com', birthday='Sun Jun 26 13:06:40 CST 2022'},
        // Student{People{idCard='912655095693206526'}, id=3, name='你叉叉', isMen=null, age=333, email='nixx@qq.com', birthday='Sun Jun 26 15:53:20 CST 2022'}],
        // intimacyMap=
        // {key1=Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'},
        // key2=Student{People{idCard='985025033313262858'}, id=2, name='李嘉诚', isMen=true, age=100, email='4848438@qq.com', birthday='Sun Jun 26 13:06:40 CST 2022'},
        // key3=Student{People{idCard='912655095693206526'}, id=3, name='你叉叉', isMen=null, age=333, email='nixx@qq.com', birthday='Sun Jun 26 15:53:20 CST 2022'}}}
        Teacher javaObject4 = JSON.parseObject(jsonString04, new TypeReference<Teacher>() {});
    }
}

 

3.2. json对象 与 json字符串 互转  及  json对象 转 java对象

package com.ggh.study;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FastJsonStudy2 {
    public static void main(String[] args) {
        Student javaObject1 = new Student("915825095613202836",1,"李小龙",true,25,"lixiaolong@qq.com",new Date(1656210000000L));

        Student javaObject2 = new Student("985025033313262858",2,"李嘉诚",true,100,"4848438@qq.com",new Date(1656220000000L));

        Student javaObject3 = new Student("912655095693206526",3,"你叉叉",null,333,"nixx@qq.com",new Date(1656230000000L));

        List<Student> list1 = new ArrayList<Student>();
        Collections.addAll(list1,javaObject1,javaObject2,javaObject3);

        Map<String,Student> map1 = new HashMap<String, Student>();
        map1.put("key1",javaObject1);
        map1.put("key2",javaObject2);
        map1.put("key3",javaObject3);

        Teacher JavaObject4 = new Teacher("915964265816522636",1,"孔子",99,javaObject1,new String[]{"李小龙","李嘉诚","你叉叉"},list1,map1);


        /*自定义对象的JSON字符串 与 JSON对象 正反序列化*/

        //JSON字符串 转 JSON对象
        // {"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"}
        String jsonString1 = "{\"age\":25,\"birthday\":1656210000000,\"email\":\"lixiaolong@qq.com\",\"id\":1,\"idCard\":\"915825095613202836\",\"men\":true,\"name\":\"李小龙\"}";
        // {"birthday":1656210000000,"idCard":"915825095613202836","men":true,"name":"李小龙","id":1,"age":25,"email":"lixiaolong@qq.com"}
        JSONObject jsonObject1 = JSON.parseObject(jsonString1);
        Integer id1 = jsonObject1.getInteger("id");
        int id2 = jsonObject1.getIntValue("id");
        int id3 = jsonObject1.getObject("id", int.class);
        Integer id4 = (Integer) jsonObject1.get("id");
        int id5 = (int) jsonObject1.get("id");
        String name1 = jsonObject1.getString("name");
        String name2 = jsonObject1.getObject("name", String.class);
        String name3 = (String) jsonObject1.get("name");
        Date birthday1 = jsonObject1.getDate("birthday");

        //JSON对象 转 JSON字符串
        // {"birthday":1656210000000,"idCard":"915825095613202836","men":true,"name":"李小龙","id":1,"age":25,"email":"lixiaolong@qq.com"}
        String jsonString01 = JSONObject.toJSONString(jsonObject1);

        //JSON对象 转 java对象
        // Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'}
        Student javaObject01 = jsonObject1.toJavaObject(Student.class);


        /*Map对象的JSON字符串 与 Map对象 正反序列化*/

        //JSON字符串 转 JSON对象
        // {"key1":{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // "key2":{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // "key3":{"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}}
        String jsonString2 = "{\"key1\":{\"age\":25,\"birthday\":1656210000000,\"email\":\"lixiaolong@qq.com\",\"id\":1,\"idCard\":\"915825095613202836\",\"men\":true,\"name\":\"李小龙\"}," +
                              "\"key2\":{\"age\":100,\"birthday\":1656220000000,\"email\":\"4848438@qq.com\",\"id\":2,\"idCard\":\"985025033313262858\",\"men\":true,\"name\":\"李嘉诚\"}," +
                              "\"key3\":{\"age\":333,\"birthday\":1656230000000,\"email\":\"nixx@qq.com\",\"id\":3,\"idCard\":\"912655095693206526\",\"name\":\"你叉叉\"}}";
        JSONObject jsonObject2 = JSON.parseObject(jsonString2);
        JSONObject jsonObject21 = jsonObject2.getJSONObject("key1");
        Integer id6 = jsonObject21.getInteger("id");
        String name4 = jsonObject1.getString("name");
        Date birthday2 = jsonObject21.getDate("birthday");

        //JSON对象 转 JSON字符串
        // {"key1":{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // "key2":{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // "key3":{"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}}
        String jsonString02 = JSONObject.toJSONString(jsonObject2);

        //JSON对象 转 java对象
        // {"key1":{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // "key2":{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // "key3":{"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}}
        Map<String,Student> map01 = jsonObject2.toJavaObject(new TypeReference<Map<String,Student>>() {});


        /*List对象的JSON字符串 与 Map对象 正反序列化*/

        //JSON字符串 转 JSON对象
        // [{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // {"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // {"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}]
        String jsonString3 = "[{\"age\":25,\"birthday\":1656210000000,\"email\":\"lixiaolong@qq.com\",\"id\":1,\"idCard\":\"915825095613202836\",\"men\":true,\"name\":\"李小龙\"}," +
                              "{\"age\":100,\"birthday\":1656220000000,\"email\":\"4848438@qq.com\",\"id\":2,\"idCard\":\"985025033313262858\",\"men\":true,\"name\":\"李嘉诚\"}," +
                              "{\"age\":333,\"birthday\":1656230000000,\"email\":\"nixx@qq.com\",\"id\":3,\"idCard\":\"912655095693206526\",\"name\":\"你叉叉\"}]";
        // [{"birthday":1656210000000,"idCard":"915825095613202836","men":true,"name":"李小龙","id":1,"age":25,"email":"lixiaolong@qq.com"},
        // {"birthday":1656220000000,"idCard":"985025033313262858","men":true,"name":"李嘉诚","id":2,"age":100,"email":"4848438@qq.com"},
        // {"birthday":1656230000000,"idCard":"912655095693206526","name":"你叉叉","id":3,"age":333,"email":"nixx@qq.com"}]
        JSONArray jsonArray1 = JSONObject.parseArray(jsonString3);
        // {"birthday":1656210000000,"idCard":"915825095613202836","men":true,"name":"李小龙","id":1,"age":25,"email":"lixiaolong@qq.com"}
        JSONObject jsonObject3 = jsonArray1.getJSONObject(0);
        // {"birthday":1656210000000,"idCard":"915825095613202836","men":true,"name":"李小龙","id":1,"age":25,"email":"lixiaolong@qq.com"}
        JSONObject jsonObject03 = (JSONObject) jsonArray1.get(0);
        Integer id7 = jsonObject3.getInteger("id");
        String name5 = jsonObject3.getString("name");
        Date birthday3 = jsonObject3.getDate("birthday");

        //JSON对象 转 JSON字符串
        // [{"birthday":1656210000000,"idCard":"915825095613202836","men":true,"name":"李小龙","id":1,"age":25,"email":"lixiaolong@qq.com"},
        // {"birthday":1656220000000,"idCard":"985025033313262858","men":true,"name":"李嘉诚","id":2,"age":100,"email":"4848438@qq.com"},
        // {"birthday":1656230000000,"idCard":"912655095693206526","name":"你叉叉","id":3,"age":333,"email":"nixx@qq.com"}]
        String jsonString03 = JSONObject.toJSONString(jsonArray1);

        //JSON对象 转 java对象
        // [Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'},
        // Student{People{idCard='985025033313262858'}, id=2, name='李嘉诚', isMen=true, age=100, email='4848438@qq.com', birthday='Sun Jun 26 13:06:40 CST 2022'},
        // Student{People{idCard='912655095693206526'}, id=3, name='你叉叉', isMen=null, age=333, email='nixx@qq.com', birthday='Sun Jun 26 15:53:20 CST 2022'}]
        List<Student> list01 = jsonArray1.toJavaObject(new TypeReference<List<Student>>() {});


        /*自定义复杂对象的JSON字符串 与 JSON对象 正反序列化*/

        //JSON字符串 转 JSON对象
        // {"advantage":["李小龙","李嘉诚","你叉叉"],
        // "age":99,"id":1,
        // "idCard":"915964265816522636",
        // "intimacyMap":
        // {"key1":{"age":25,"birthday":1656210000000,"email":"lixiaolong@qq.com","id":1,"idCard":"915825095613202836","men":true,"name":"李小龙"},
        // "key2":{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":"李嘉诚"},
        // "key3":{"age":333,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","name":"你叉叉"}},
        // "myChild":{"$ref":"$.intimacyMap.key1"},
        // "name":"孔子",
        // "taughtStudentList":
        // [{"$ref":"$.intimacyMap.key1"},{"$ref":"$.intimacyMap.key2"},{"$ref":"$.intimacyMap.key3"}]}
        String jsonString4 = "{\"advantage\":[\"李小龙\",\"李嘉诚\",\"你叉叉\"]," +
                              "\"age\":99," +
                              "\"id\":1," +
                              "\"idCard\":\"915964265816522636\"," +
                              "\"intimacyMap\":" +
                              "{\"key1\":{\"age\":25,\"birthday\":1656210000000,\"email\":\"lixiaolong@qq.com\",\"id\":1,\"idCard\":\"915825095613202836\",\"men\":true,\"name\":\"李小龙\"}," +
                              "\"key2\":{\"age\":100,\"birthday\":1656220000000,\"email\":\"4848438@qq.com\",\"id\":2,\"idCard\":\"985025033313262858\",\"men\":true,\"name\":\"李嘉诚\"}," +
                              "\"key3\":{\"age\":333,\"birthday\":1656230000000,\"email\":\"nixx@qq.com\",\"id\":3,\"idCard\":\"912655095693206526\",\"name\":\"你叉叉\"}}," +
                              "\"myChild\":{\"$ref\":\"$.intimacyMap.key1\"}," +
                              "\"name\":\"孔子\"," +
                              "\"taughtStudentList\":" +
                              "[{\"$ref\":\"$.intimacyMap.key1\"},{\"$ref\":\"$.intimacyMap.key2\"},{\"$ref\":\"$.intimacyMap.key3\"}]}";

        JSONObject jsonObject4 = JSONObject.parseObject(jsonString4);
        JSONObject jsonObject41 = jsonObject4.getJSONObject("intimacyMap");
        JSONObject jsonObject411 = jsonObject41.getJSONObject("key1");
        Integer id8 = jsonObject411.getInteger("id");
        String name6 = jsonObject411.getString("name");
        Date birthday4 = jsonObject411.getDate("birthday");

        //JSON对象 转 JSON字符串
        // {"myChild":{"birthday":1656210000000,"idCard":"915825095613202836","men":true,"name":"李小龙","id":1,"age":25,"email":"lixiaolong@qq.com"},
        // "advantage":["李小龙","李嘉诚","你叉叉"],
        // "idCard":"915964265816522636",
        // "name":"孔子",
        // "intimacyMap":{"key1":{"$ref":"$.myChild"},
        // "key2":{"birthday":1656220000000,"idCard":"985025033313262858","men":true,"name":"李嘉诚","id":2,"age":100,"email":"4848438@qq.com"},
        // "key3":{"birthday":1656230000000,"idCard":"912655095693206526","name":"你叉叉","id":3,"age":333,"email":"nixx@qq.com"}},
        // "id":1,
        // "taughtStudentList":[{"$ref":"$.myChild"},{"$ref":"$.intimacyMap.key2"},{"$ref":"$.intimacyMap.key3"}],"age":99}
        String jsonString04 = JSONObject.toJSONString(jsonObject4);

        //JSON对象 转 java对象
        // Teacher{id=1,
        // name='孔子',
        // age=99,
        // myChild=Student{People{idCard='915825095613202836'},
        // id=1,
        // name='李小龙',
        // isMen=true,
        // age=25,
        // email='lixiaolong@qq.com',
        // birthday='Sun Jun 26 10:20:00 CST 2022'},
        // advantage=[李小龙, 李嘉诚, 你叉叉],
        // taughtStudentList=
        // [Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'},
        // Student{People{idCard='985025033313262858'}, id=2, name='李嘉诚', isMen=true, age=100, email='4848438@qq.com', birthday='Sun Jun 26 13:06:40 CST 2022'},
        // Student{People{idCard='912655095693206526'}, id=3, name='你叉叉', isMen=null, age=333, email='nixx@qq.com', birthday='Sun Jun 26 15:53:20 CST 2022'}],
        // intimacyMap=
        // {key1=Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=25, email='lixiaolong@qq.com', birthday='Sun Jun 26 10:20:00 CST 2022'},
        // key2=Student{People{idCard='985025033313262858'}, id=2, name='李嘉诚', isMen=true, age=100, email='4848438@qq.com', birthday='Sun Jun 26 13:06:40 CST 2022'},
        // key3=Student{People{idCard='912655095693206526'}, id=3, name='你叉叉', isMen=null, age=333, email='nixx@qq.com', birthday='Sun Jun 26 15:53:20 CST 2022'}}}
        Teacher javaObject04 = jsonObject4.toJavaObject(Teacher.class);
    }
}

 

3.3. 定制序列化(使用方法)

package com.ggh.study;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.NameFilter;
import com.alibaba.fastjson.serializer.SerializeFilter;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

public class FastJsonStudy3 {
    public static void main(String[] args) {
        Student javaObject1 = new Student(null,null,null,null,null,null,null);

        Student javaObject2 = new Student("985025033313262858",2,null,true,100,"4848438@qq.com",new Date(1656220000000L));

        Student javaObject3 = new Student("912655095693206526",3,"你叉叉",true,null,"nixx@qq.com",new Date(1656230000000L));

        Student javaObject4 = new Student("965255059693206853",4,"哈啊哈",null,512,"qiongkaixin@qq.com",new Date(1656240000000L));

        Student javaObject5 = new Student("951455059333205624",5,"咕噜噜",true,124,"gulugulu@qq.com",new Date(1656250000000L));

        Student javaObject6 = new Student("951455059333232549",5,"咔嚓嚓",true,985,"kachakacha@qq.com",new Date(1656260000000L));

        List<Student> list1 = new ArrayList<>();
        Collections.addAll(list1,javaObject2,javaObject2);

        /*定制序列化 默认序列化时null值对应键值对会舍去,日期会以格林威治毫秒值显示*/

        // 定制null值对应键值对保留 默认情况下null值对应的键值对会被舍去
        // {"age":null,"birthday":null,"email":null,"id":null,"idCard":null,"men":null,"name":null}
        String jsonString1 = JSONObject.toJSONString(javaObject1, SerializerFeature.WriteMapNullValue);

        // 定制String类型的键对应的null值转为空串""
        // {"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true,"name":""}
        String jsonString2 = JSONObject.toJSONString(javaObject2, SerializerFeature.WriteNullStringAsEmpty);

        // 定制数值包装类型的键对应的null值转为0
        // {"age":0,"birthday":1656230000000,"email":"nixx@qq.com","id":3,"idCard":"912655095693206526","men":true,"name":"你叉叉"}
        String jsonString3 = JSONObject.toJSONString(javaObject3, SerializerFeature.WriteNullNumberAsZero);

        // 定制Boolean键对应的null值转为false
        // {"age":512,"birthday":1656240000000,"email":"qiongkaixin@qq.com","id":4,"idCard":"965255059693206853","men":false,"name":"哈啊哈"}
        String jsonString4 = JSONObject.toJSONString(javaObject4, SerializerFeature.WriteNullBooleanAsFalse);

        // 定制序列化输出日期的格式
        // 设置定制默认日期格式
        JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS E"; //年-月-日 时:分:秒.毫秒 星期
        // {"age":124,"birthday":"2022-06-26 21:26:40.000 星期日","email":"gulugulu@qq.com","id":5,"idCard":"951455059333205624","men":true,"name":"咕噜噜"}
        String jsonString5 = JSONObject.toJSONString(javaObject5, SerializerFeature.WriteDateUseDateFormat); //使用定制默认日期格式 定制默认≠默认
        // 还原定制默认日期格式
        JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

        // 定制美化序列化格式
        // {
        //    "age":985,
        //    "birthday":1656260000000,
        //    "email":"kachakacha@qq.com",
        //    "id":5,
        //    "idCard":"951455059333232549",
        //    "men":true,
        //    "name":"咔嚓嚓"
        // }
        String jsonString6 = JSONObject.toJSONString(javaObject6,true);

        // 定制完整输出序列化 默认情况下会将重复的对象以引用方式输出[{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true},{"$ref":"$[0]"}]
        // [{"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true},
        // {"age":100,"birthday":1656220000000,"email":"4848438@qq.com","id":2,"idCard":"985025033313262858","men":true}]
        String jsonString7 = JSONObject.toJSONString(list1, SerializerFeature.DisableCircularReferenceDetect);

        // 定制序列化键名
        SerializeFilter nameFilter = new NameFilter() {
            @Override
            public String process(Object object, String name, Object value) {
                // 将键名序列化为大写
                return name.toUpperCase();
            }
        };
        // [{"AGE":100,"BIRTHDAY":1656220000000,"EMAIL":"4848438@qq.com","ID":2,"IDCARD":"985025033313262858","MEN":true},{"$ref":"$[0]"}]
        String jsonString8 = JSONObject.toJSONString(list1, nameFilter);

        // 多个定制序列化可连用
        JSONObject.toJSONString(javaObject2, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullNumberAsZero);
    }
}

 

4. 定制序列化(使用注解)

package com.ggh.study;

import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.annotation.JSONType;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class People {
    private String idCard; //身份证号

    public People() {
    }

    public People(String idCard) {
        this.idCard = idCard;
    }

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    @Override
    public String toString() {
        return "People{" +
                "idCard=" + (idCard==null?"":'\'') + idCard + (idCard==null?"":'\'') +
                '}';
    }
}

class Student extends People{
    @JSONField(serialzeFeatures=SerializerFeature.WriteNullNumberAsZero) //serialzeFeatures=SerializerFeature.WriteNullNumberAsZero定制当id的值为null时序列化后值为0,serialzeFeatures可接收的其他值的含义参考单对象序列化
    private Integer id;
    @JSONField(name="studentName", ordinal=2) //name指定序列化后键的名称和正反序列化前键应为的名称
    private String name;
    private Boolean isMen;
    @JSONField(/*指定该字段是否序列化*/serialize = false, /*指定该字段是否反序列化*/deserialize = false)
    private Integer age;
    @JSONField(ordinal=1) //ordinal指定序列化后此键值对的先后顺序,越小越靠前,默认ordinal=0, ordinal<0时不起效
    private String email;
    @JSONField(format="YYYY-MM-dd HH:mm:ss.SSS E") //format="YYYY-MM-dd HH:mm:ss.SSS E"指定序列化后日期的格式为 年-月-日 时:分:秒.毫秒 星期
    private Date birthday;

    public Student() {
    }

    public Student(Integer id, String name, Boolean isMen, Integer age, String email, Date birthday) {
        this.id = id;
        this.name = name;
        this.isMen = isMen;
        this.age = age;
        this.email = email;
        this.birthday = birthday;
    }

    public Student(String idCard, Integer id, String name, Boolean isMen, Integer age, String email, Date birthday) {
        super(idCard);
        this.id = id;
        this.name = name;
        this.isMen = isMen;
        this.age = age;
        this.email = email;
        this.birthday = birthday;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Boolean getMen() {
        return isMen;
    }

    public void setMen(Boolean men) {
        isMen = men;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Student{" +
                super.toString() +
                ", id=" + id +
                ", name=" + (name==null?"":'\'') + name + (name==null?"":'\'') +
                ", isMen=" + isMen +
                ", age=" + age +
                ", email=" + (email==null?"":'\'') + email + (email==null?"":'\'') +
                ", birthday=" + (birthday==null?"":'\'') + birthday + (birthday==null?"":'\'') +
                '}';
    }
}

@JSONType(includes = {"id","Student","taughtStudentList"}, orders = {"Student","id","taughtStudentList"}) //includes指定需要序列化的字段,orders指定序列化后各键值对的顺序
class Teacher extends People{
    private Integer id;
    private String name;
    private Integer age;
    private Student myChild; //我的孩子
    private String[] advantage; //优点
    private List<Student> taughtStudentList; //教过的学生
    private Map<String, Student> intimacyMap; //与各学生的亲密等级

    public Teacher() {
    }

    public Teacher(Integer id, String name, Integer age, Student myChild, String[] advantage, List<Student> taughtStudentList, Map<String, Student> intimacyMap) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.myChild = myChild;
        this.advantage = advantage;
        this.taughtStudentList = taughtStudentList;
        this.intimacyMap = intimacyMap;
    }

    public Teacher(String idCard, Integer id, String name, Integer age, Student myChild, String[] advantage, List<Student> taughtStudentList, Map<String, Student> intimacyMap) {
        super(idCard);
        this.id = id;
        this.name = name;
        this.age = age;
        this.myChild = myChild;
        this.advantage = advantage;
        this.taughtStudentList = taughtStudentList;
        this.intimacyMap = intimacyMap;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Student getMyChild() {
        return myChild;
    }

    public void setMyChild(Student myChild) {
        this.myChild = myChild;
    }

    public String[] getAdvantage() {
        return advantage;
    }

    public void setAdvantage(String[] advantage) {
        this.advantage = advantage;
    }

    public List<Student> getTaughtStudentList() {
        return taughtStudentList;
    }

    public void setTaughtStudentList(List<Student> taughtStudentList) {
        this.taughtStudentList = taughtStudentList;
    }

    public Map<String, Student> getIntimacyMap() {
        return intimacyMap;
    }

    public void setIntimacyMap(Map<String, Student> intimacyMap) {
        this.intimacyMap = intimacyMap;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", name=" + (name==null?"":'\'') + name + (name==null?"":'\'') +
                ", age=" + age +
                ", myChild=" + myChild +
                ", advantage=" + Arrays.toString(advantage) +
                ", taughtStudentList=" + taughtStudentList +
                ", intimacyMap=" + intimacyMap +
                '}';
    }
}
package com.ggh.study;

import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FastJsonStudy4 {
    public static void main(String[] args) {
        Student javaObject1 = new Student("915825095613202836",1,"李小龙",true,25,"lixiaolong@qq.com",new Date(1656210000000L));

        Student javaObject2 = new Student("985025033313262858",2,"李嘉诚",true,100,"4848438@qq.com",new Date(1656220000000L));

        Student javaObject3 = new Student("912655095693206526",3,"你叉叉",null,333,"nixx@qq.com",new Date(1656230000000L));

        List<Student> list1 = new ArrayList<Student>();
        Collections.addAll(list1,javaObject1,javaObject2,javaObject3);

        Map<String,Student> map1 = new HashMap<String, Student>();
        map1.put("key1",javaObject1);
        map1.put("key2",javaObject2);
        map1.put("key3",javaObject3);

        Teacher JavaObject4 = new Teacher("915964265816522636",1,"孔子",99,javaObject1,new String[]{"李小龙","李嘉诚","你叉叉"},list1,map1);


        /*测试@JSONField*/

        // {"birthday":"2022-06-26 10:20:00.000 星期日","id":1,"idCard":"915825095613202836","men":true,"email":"lixiaolong@qq.com","studentName":"李小龙"}
        String jsonString1 = JSONObject.toJSONString(javaObject1);
        // Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=null, email='lixiaolong@qq.com', birthday='Sun Dec 26 10:20:00 CST 2021'}
        Student javaObject01 = JSONObject.parseObject(jsonString1, Student.class);


        /*测试@JSONType*/

        // {"id":1,
        // "taughtStudentList":
        // [{"birthday":"2022-06-26 10:20:00.000 星期日","id":1,"idCard":"915825095613202836","men":true,"email":"lixiaolong@qq.com","studentName":"李小龙"},
        // {"birthday":"2022-06-26 13:06:40.000 星期日","id":2,"idCard":"985025033313262858","men":true,"email":"4848438@qq.com","studentName":"李嘉诚"},
        // {"birthday":"2022-06-26 15:53:20.000 星期日","id":3,"idCard":"912655095693206526","email":"nixx@qq.com",
        // "studentName":"你叉叉"}]}
        String jsonString4 = JSONObject.toJSONString(JavaObject4);
        // Teacher{id=1,
        // name=null,
        // age=null,
        // myChild=null,
        // advantage=null,
        // taughtStudentList=
        // [Student{People{idCard='915825095613202836'}, id=1, name='李小龙', isMen=true, age=null, email='lixiaolong@qq.com', birthday='Sun Dec 26 10:20:00 CST 2021'},
        // Student{People{idCard='985025033313262858'}, id=2, name='李嘉诚', isMen=true, age=null, email='4848438@qq.com', birthday='Sun Dec 26 13:06:40 CST 2021'},
        // Student{People{idCard='912655095693206526'}, id=3, name='你叉叉', isMen=null, age=null, email='nixx@qq.com', birthday='Sun Dec 26 15:53:20 CST 2021'}],
        // intimacyMap=null}
        Teacher jsonObject04 = JSONObject.parseObject(jsonString4,Teacher.class);
    }
}

 

posted @ 2022-06-21 23:07  略乏旅人  阅读(352)  评论(0)    收藏  举报