返回顶部
首页 > 资讯 > 后端开发 > JAVA >fastjson2 介绍及使用
  • 647
分享到

fastjson2 介绍及使用

javafastjson2fastjsonfastJson 2023-08-18 19:08:39 647人浏览 八月长安
摘要

目录 前言一、导入fastjson2依赖二、json对象与json数组的创建json对象创建json数组创建 三、json对象取值与json数组遍历取值json对象取值json数组遍历取值 四、json对象与字符串的转换js

前言

fastJSON2 是 FASTjsON 项目的重要升级,目标是为下一个十年提供一个高性能的JSON库, fastjson2 性能相比原先旧的 fastjson 有了很大提升,并且 fastjson2 更安全,完全删除autoType白名单,提升了安全性。

关于fastjson2升级指南
fastjson2 的github地址

一、导入fastjson2依赖

Maven如下:

        <dependency>            <groupId>com.alibaba.fastjson2groupId>            <artifactId>fastjson2artifactId>            <version>2.0.26version>        dependency>

需要注意的一点是在使用 fastjson2 时导入的包名是 com.alibaba.fastjson2 ,就像下面这样:

import com.alibaba.fastjson2.JSON;import com.alibaba.fastjson2.JSONObject;import com.alibaba.fastjson2.JSONArray;

二、json对象与json数组的创建

json对象创建

        JSONObject info = new JSONObject();        info.put("name", "张三");        info.put("age", "18");        info.put("地理", "70");        info.put("英语", "60");

json数组创建

JSONObject info1 = new JSONObject();        info1.put("name", "张三");        info1.put("age", "18");        JSONObject info2 = new JSONObject();        info2.put("name", "李四");        info2.put("age", "19");        //把上面创建的两个json对象加入到json数组里        JSONArray array = new JSONArray();        array.add(info1);        array.add(info2);
        JSONArray array = new JSONArray();        array.add("1班");        array.add("2班");        array.add("3班");

三、json对象取值与json数组遍历取值

json对象取值

        JSONArray array = new JSONArray();        array.add("1班");        array.add("2班");        array.add("3班");        JSONObject school = new JSONObject();        school.put("schoolName", "第一中学");        school.put("teacher", "刘梅");        JSONObject info = new JSONObject();        info.put("name", "张三");        info.put("age", "18");        info.put("gradle",array);        info.put("schoolInfo",school);        //从info中取值        System.out.println(info.getString("name")); //张三        System.out.println(info.getIntValue("age"));//18        System.out.println(info.getJSONArray("gradle"));//["1班","2班","3班"]        System.out.println(info.getJSONObject("schoolInfo"));//{"schoolName":"第一中学","teacher":"刘梅"}

json数组遍历取值

        JSONObject info1 = new JSONObject();        info1.put("name", "张三");        info1.put("age", "18");        JSONObject info2 = new JSONObject();        info2.put("name", "李四");        info2.put("age", "19");        JSONArray array = new JSONArray();        array.add(info1);        array.add(info2);        //遍历获取json数组中对象的值        for (int i = 0; i < array.size(); i++) {            JSONObject json = array.getJSONObject(i);            System.out.println(json.getString("name"));            System.out.println(json.getString("age"));        }

四、json对象与字符串的转换

json对象与字符串的转换

JSONObject info = new JSONObject();        info.put("name", "张三");        info.put("age", "18");        info.put("地理", "70");        info.put("英语", "60");        //JSON对象转字符串        String str = JSON.toJSONString(info);        //JSON字符串转JSON对象        JSONObject json = JSONObject.parseObject(str);

json字符串的字节数组转json对象

        String str = "{\"name\":\"张三\",\"age\":\"18\",\"地理\":\"70\",\"英语\":\"60\"}";        byte[] bytes = str.getBytes();        JSONObject data = JSON.parseObject(bytes);

五、json数组与字符串的转换

        String text = "[\"张三\",\"李四\",\"王五\"]";        //json字符串转json数组        JSONArray data = JSON.parseArray(text);        //json数组转json字符串        String str = JSONArray.toJSONString(data);

六、json字符串转java对象的转换

Student类如下:

public class Student {    public String name;    public int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public Student(String name, int age) {        this.name = name;        this.age = age;    }}

json字符串转java对象的转换

        Student student = new Student("张三", 18);        //Student对象转JSON字符串        String studentStr = JSON.toJSONString(student);        //JSON字符串转Student对象        Student data = JSON.parseObject(studentStr, Student.class);

java对象转byte数组转换

        Student student = new Student("张三", 18);        //Student对象转字节数组        byte[] text = JSON.toJSONBytes(student);        //字节数组转Student对象        Student data = JSON.parseObject(text, Student.class);

七、json字符串与Map转换

json字符串转Map

        String str="{\n" +                "\"gradle\":\"高一\",\n" +                "\"number\":\"2\",\n" +                "\"people\":[{\"name\":\"张三\",\"age\":\"15\",\"phone\":\"123456\"},\n" +                "         {\"name\":\"李四\",\"age\":\"16\",\"phone\":\"78945\"}]\n" +                "}";        //json字符串转Map        Map<String, Object> map = JSONObject.parseObject(str, new TypeReference<Map<String, Object>>() {});        System.out.println(map.get("gradle").toString());        System.out.println(map.get("number").toString());        System.out.println(map.get("people").toString());

Map转json字符串

(注意:如果直接使用JSON.toJSONString(map)转换,因为"测试1"的值为null,转换的结果就会是 {“测试2”:“hello”})

Map<String,String> map=new HashMap<>();        map.put("测试1",null);        map.put("测试2","hello");//{"测试2":"hello","测试1":null}        String str = JSON.toJSONString(map, JSONWriter.Feature.WriteMapNullValue);

如果你使用的是老的fastjson1,可以像下面这样转换:

Map<String,String> map=new HashMap<>();map.put("测试1",null);map.put("测试2","hello");String str = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue) ;

八、json数组转List

        String str="{\n" +                "\"gradle\":\"高一\",\n" +                "\"number\":\"2\",\n" +                "\"people\":[{\"name\":\"张三\",\"age\":\"15\",\"phone\":\"123456\"},\n" +                "         {\"name\":\"李四\",\"age\":\"16\",\"phone\":\"78945\"}]\n" +                "}";        JSONObject strJson = JSONObject.parseObject(str);        //获取people数组        JSONArray people = strJson.getJSONArray("people");        //json数组转List        List<Map> list = people.toJavaList(Map.class);

如果你使用的是老的fastjson1,可以像下面这样转换:

        String str="{\n" +                "\"gradle\":\"高一\",\n" +                "\"number\":\"2\",\n" +                "\"people\":[{\"name\":\"张三\",\"age\":\"15\",\"phone\":\"123456\"},\n" +                "         {\"name\":\"李四\",\"age\":\"16\",\"phone\":\"78945\"}]\n" +                "}";        JSONObject strJson=JSONObject.parseObject(str);//字符串转json对象        String people = String.valueOf(strJson.getJSONArray("people"));        List<Map<String,String>> list = (List<Map<String,String>>) JSONArray.parse(people);

九、json字符串格式化

有时候我们想把 json 字符串格式化输出,也就是该缩进的缩进该换行的换行,让它更美观的输出,可以像下面这样:

        String str = "[{\"isSendPhone\":\"true\",\"id\":\"22258352\",\"phoneMessgge\":\"为避免影响您的正常使用请及时续费,若已续费请忽略此信息。\",\"readsendtime\":\"9\",\"countdown\":\"7\",\"count\":\"5\",\"serviceName\":\"流程助手\",\"startdate\":\"2022-02-09 00:00:00.0\",\"insertTime\":\"2023-02-02 07:00:38.0\",\"enddate\":\"2023-02-08 23:59:59.0\",\"emailMessage\":\"为避免影响您的正常使用请及时续费,若已续费请忽略此信息。\",\"phone\":\"\",\"companyname\":\"顾问有限责任公司\",\"serviceId\":\"21\",\"isSendeMail\":\"true\",\"email\":\"\"},{\"isSendPhone\":\"true\",\"eid\":\"7682130\",\"phoneMessgge\":\"为避免影响您的正常使用请及时续费,若已续费请忽略此信息。\",\"readsendtime\":\"9\",\"countdown\":\"15\",\"count\":\"50\",\"serviceName\":\"经理人自助服务\",\"startdate\":\"2022-02-17 00:00:00.0\",\"insertTime\":\"2023-02-02 07:00:38.0\",\"enddate\":\"2023-02-16 23:59:59.0\",\"emailMessage\":\"为避免影响您的正常使用请及时续费,若已续费请忽略此信息。\",\"phone\":\"\",\"companyname\":\"生物科技股份有限公司\",\"serviceId\":\"2\",\"isSendeMail\":\"true\",\"email\":\"\"}]";                str =  str.trim();        String fORMatStr = null;        if (str.startsWith("[")) {            JSONArray data = JSON.parseArray(str);            formatStr = JSONArray.toJSONString(data, JSONWriter.Feature.PrettyFormat, JSONWriter.Feature.WriteMapNullValue, JSONWriter.Feature.WriteNullListAsEmpty);        } else {            JSONObject strJson = JSONObject.parseObject(str);            formatStr = JSON.toJSONString(strJson, JSONWriter.Feature.PrettyFormat, JSONWriter.Feature.WriteMapNullValue, JSONWriter.Feature.WriteNullListAsEmpty);        }        System.out.println(formatStr);

输出结果:

[{"isSendPhone":"true","id":"22258352","phoneMessgge":"为避免影响您的正常使用请及时续费,若已续费请忽略此信息。","readsendtime":"9","countdown":"7","count":"5","serviceName":"流程助手","startdate":"2022-02-09 00:00:00.0","insertTime":"2023-02-02 07:00:38.0","enddate":"2023-02-08 23:59:59.0","emailMessage":"为避免影响您的正常使用请及时续费,若已续费请忽略此信息。","phone":"","companyname":"XX顾问有限责任公司","serviceId":"21","isSendeMail":"true","email":""},{"isSendPhone":"true","eid":"7682130","phoneMessgge":"为避免影响您的正常使用请及时续费,若已续费请忽略此信息。","readsendtime":"9","countdown":"15","count":"50","serviceName":"经理人自助服务","startdate":"2022-02-17 00:00:00.0","insertTime":"2023-02-02 07:00:38.0","enddate":"2023-02-16 23:59:59.0","emailMessage":"为避免影响您的正常使用请及时续费,若已续费请忽略此信息。","phone":"","companyname":"XX科技股份有限公司","serviceId":"2","isSendeMail":"true","email":""}]

参考:
fastjson2

来源地址:https://blog.csdn.net/qq_33697094/article/details/128114939

--结束END--

本文标题: fastjson2 介绍及使用

本文链接: https://www.lsjlt.com/news/374577.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作