Fastjson中关于json的处理与配置

2023-12-24 07:02:29

Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,能够直接跑在JDK上。
FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。

一、导入依赖:

在maven项目的pom文件中直接配置fastjson依赖,fastjson最新版本都会发布到maven中央仓库,你可以直接依赖。

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>x.x.x</version>
</dependency>

其中x.x.x是版本号,根据需要使用特定版本,建议使用最新版本。

二、Fastjson 主要的API?

主要的3个类,JSON、JSONArray、JSONObject。JSONObject和JSONArray继承JSON。
JSONObject代表json对象,JSONArray代表json对象数组,JSON代表JSONObject和JSONArray的转化。

对于JSON、JSONArray、JSONObject我的理解:
JSON提供了基本的转换方法,例如
????????JSON.toJSONString:将java对象转换为json字符串
????????JSON.parseObject:json字符串转换为指定java对象或转换为列表或者转换为JSONObject对象
????????JSON.parseArray:json字符串转换为JSONArray。

而JSONObject对象继承了JSON,且实现了Map类。所以JSONObject是进一步封装类,这个类的主要作用就是,将Json字符串转换为JSONObject对象之后,实际上就相当于将Json字符串转换成了Map类型的key-value的格式,所以提供了很多丰富的api,可以让我们像操作Map对象那样,去操作JSONObject。例如去获得json字符串中某个属性,或某个节点下的属性。

JSONArray对象也继承了JSON,但是实现了List类,所以JOSNArray也是经过进一步的封装,这个类的主要作用就是,将Json字符串转换为JSONArray之后,实际上就相当于转换成了List类型的,提供了很多像操作List那样的api,例如判断该列表是否为空,或者获取某个索引下的属性。

所以我们使用fastObject时,如果只需要简单的转换,我们直接使用JSON类中的转换方法即可,但是如果需要更加细致的操作,例如直接获取json字符串中某个属性或者某个节点下的属性,可以进一步转换为JSONObject或者JSONArray来操作会更方便。

序列化
String jsonString = JSON.toJSONString(obj);
反序列化:
VO vo = JSON.parseObject("…", VO.class);
泛型反序列化:
import com.alibaba.fastjson.TypeReference; List list = JSON.parseObject("…", new TypeReference<List>() {});

   //对象转换为Json字符串
        Student student = new Student("姓名", null, LocalDateTime.now());
        String s = JSON.toJSONString(student);
        System.out.println("对象转json:"+s);
        //列表转json字符串
        List<Student> students = new ArrayList<>();
        students.add(new Student("姓名","年龄",LocalDateTime.now()));
        students.add(new Student("姓名","年龄",LocalDateTime.now()));
        students.add(new Student("姓名","年龄",LocalDateTime.now()));
        String s1 = JSON.toJSONString(students);
        System.out.println("List转json:"+s1);
        //Map类型转字符串
        Map<Integer,Student> map = new HashMap<>();
        map.put(1,new Student("姓名","年龄",LocalDateTime.now()));
        map.put(2,new Student("姓名","年龄",LocalDateTime.now()));
        map.put(3,new Student("姓名","年龄",LocalDateTime.now()));
        String s2 = JSON.toJSONString(map);
        System.out.println("Map转json:"+s2);
        //Map类型中有List 转字符串
        Map<Integer,List<Student>> map1 = new HashMap<>();
        map1.put(1,students);
        map1.put(2,students);
        map1.put(3,students);
        String s3 = JSON.toJSONString(map1);
        System.out.println("Map中含有List转json:"+s3);


        //json转换为对象
        Student student1 = JSON.parseObject("{\"age\":\"性别\",\"name\":\"姓名\",\"time\":\"2023-12-22T11:01:32.870\"}", Student.class);
        System.out.println("json转换为对象:"+student1);

        //json转换为List
        //使用parseObject
        List<Student> studentList = JSON.parseObject("[{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T14:00:30.592\"},{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T14:00:30.592\"},{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T14:00:30.592\"}]"
                , new TypeReference<List<Student>>() {});
        System.out.println("json转换为List:"+studentList);
        //使用parseArray
        List<Student> studentList1 = JSON.parseArray("[{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T14:00:30.592\"},{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T14:00:30.592\"},{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T14:00:30.592\"}]"
                , Student.class);
        System.out.println("json转换为List:"+studentList1);

        //json转Map
        //使用parseObject
        Map<Integer, Student> map2 = JSON.parseObject("{1:{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T15:10:57.807\"},2:{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T15:10:57.807\"},3:{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T15:10:57.807\"}}"
                , new TypeReference<Map<Integer, Student>>() {
                });
        System.out.println("json转Map:"+map2);
        

对象转json:{"name":"姓名","time":"2023-12-22T15:28:18.474"}


List转json:[{"age":"年龄","name":"姓名","time":"2023-12-22T15:28:18.925"},{"age":"年龄","name":"姓名","time":"2023-12-22T15:28:18.925"},{"age":"年龄","name":"姓名","time":"2023-12-22T15:28:18.925"}]


Map转json:{1:{"age":"年龄","name":"姓名","time":"2023-12-22T15:28:18.927"},2:{"age":"年龄","name":"姓名","time":"2023-12-22T15:28:18.927"},3:{"age":"年龄","name":"姓名","time":"2023-12-22T15:28:18.927"}}


Map中含有List转json:{1:[{"age":"年龄","name":"姓名","time":"2023-12-22T15:28:18.925"},{"age":"年龄","name":"姓名","time":"2023-12-22T15:28:18.925"},{"age":"年龄","name":"姓名","time":"2023-12-22T15:28:18.925"}],2:[{"$ref":"$[1][0]"},{"$ref":"$[1][1]"},{"$ref":"$[1][2]"}],3:[{"$ref":"$[1][0]"},{"$ref":"$[1][1]"},{"$ref":"$[1][2]"}]}


json转换为对象:Student(name=姓名, age=性别, time=2023-12-22T11:01:32.870)


json转换为List:[Student(name=姓名, age=年龄, time=2023-12-22T14:00:30.592), Student(name=姓名, age=年龄, time=2023-12-22T14:00:30.592), Student(name=姓名, age=年龄, time=2023-12-22T14:00:30.592)]


json转换为List:[Student(name=姓名, age=年龄, time=2023-12-22T14:00:30.592), Student(name=姓名, age=年龄, time=2023-12-22T14:00:30.592), Student(name=姓名, age=年龄, time=2023-12-22T14:00:30.592)]


json转Map:{1=Student(name=姓名, age=年龄, time=2023-12-22T15:10:57.807), 2=Student(name=姓名, age=年龄, time=2023-12-22T15:10:57.807), 3=Student(name=姓名, age=年龄, time=2023-12-22T15:10:57.807)}

??

JSONObject实现了Map接口,所以Map对象可以直接添加JSONObject中的属性,可以理解为JSONObject就是key为String,Value为String的Map对象,但是又在此基础上封装了很多方法。

JSONArray实现了List接口,所以List对象也可以直接添加JSONArray中的属性,可以理解为JSONArray中都是string类型的列表。? ??? ?

三、Fastjson方法总结:

Json相关方法:
parse()、parseObject()、parseArray:
        String str = "{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T15:51:01.993\"}";
        String arrayStr = "[{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T15:51:01.993\"},{\"age\":\"年龄\",\"name\":\"姓名\",\"time\":\"2023-12-22T15:51:01.993\"}]";

        //parse将对象转换为String
        Object parse = JSON.parse(arrayStr);
        //parseObject转换为java对象,如果不指定对象类型,就转换为JSONObject类型,如果指定 就转换为指定类型
        JSONObject jsonObject = JSON.parseObject(str);
        Student student = JSON.parseObject(str, Student.class);
        //parseArray转换为列表,如果不指定列表类型,就转换为List类型,如果指定 就转换为指定类型列表
        JSONArray jsonArray = JSON.parseArray(arrayStr);
        List<Student> students = JSON.parseArray(arrayStr, Student.class);
toJSON()、toJavaObject()、toJSONBytes():
        //toJSON,转换为Object,也可以强制转换为某种类型
        Object o = JSON.toJSON(student1);
        JSONObject o1 =  (JSONObject)JSON.toJSON(student1);
        //toJavaObject,将JSONObject转换为指定的java对象
        JSONObject jsonObject1 = JSON.parseObject(str);
        Student student4 = JSON.toJavaObject(jsonObject1, Student.class);
        //toJSONBytes,将java对象转换为字节数组
        byte[] bytes = JSON.toJSONBytes(student1);

文章来源:https://blog.csdn.net/kkkkatoq/article/details/135151452
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。