• 【主流技术】日常工作中关于 JSON 转换的经验大全(Java)


    前言

    JSON 是 JavaScript 数据类型中的一个子集,目前主流的浏览器都使用了通用的 JavaScript 引擎组件,所以在解析 JSON 格式时具有良好的兼容性。这便是 “JavaScript Object Notation”(缩写为 JSON )诞生的由来。

    本文按照我们的输入和输出结果类型进行分类,包括从其它类型转换到 JSON 相关,以及从 JSON 相关转换到其它类型这两大类。

    注:以下都是基于阿里的 fastjson 来讲解操作的。

    fastjson 可以将 JSON Parse 的性能提升到极致,是目前 Java 语言中最快的 JSON 库。fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web 输出、Android 客户端等多种应用场景。

    
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>fastjsonartifactId>
        <version>1.2.83version>
    dependency>
    

    一、JSON 回顾

    在开始分享文章的主要内容前,我们可以先回顾一下关于 JSON 的基础知识。

    1.1结构形式

    JSON 有键值对形式和数组形式这2种结构形式。

    以下这个例子就是键值对类型的:

    {
        "playerInfo": {
            "playerName": "Alex",
            "playerAge": 18
        },
        "activityId": "871047729944117248",
        "activityType": "OA",
        "awardId": "886982449056579584",
        "awardName": "OA测试",
        "stageId": "816982449034752351",
        "roundId": "808657473445768946",
        "noticeTypes": "APP"
    }
    

    这种结构的 JSON 数据规则是:一个无序的 "key" : "value" 集合,一个 JSON 对象以 { 左括号开始,以 } 右括号结束。每个 "key" 后跟一个英文的 : 冒号,每个"key" : "value"之间使用英文的 , 逗号进行分隔。而每个 JSON 对象是可以嵌套的。

    那 JSON 的数组形式又是怎么样的呢?下面同样再举一个例子:

    {
        "data": {
            "content": [
                {
                    "id": "926160574061371392",
                    "status": "PROGRESSING",
                    "updateContent": "测试一下",
                    "version": "10.6.0",
                    "createTime": "2023-10-31 17:11:28"
                },
                {
                    "id": "926160574061371326",
                    "status": "CANCELED",
                    "updateContent": "测试测试",
                    "version": "123.0",
                    "createTime": "2023-10-31 17:11:28"
                }
            ]
        },
        "code": 200,
        "msg": "成功",
        "success": true
    }
    

    数组形式的 JSON 数据就是值(value)的有序集合。一个数组以 [ 左中括号开始, ] 右中括号结束。值之间使用 , 逗号分隔。


    二、其它类型 -> JSON相关

    这里的其它类型,包括 Java 对象、数组、String 字符串、泛型的 以及 Object 对象等;JSON相关表示 Json 对象、Json 字符串等。

    2.1 JavaBean 转 JsonObject

    实体类如下:

    @Data
    @EqualsAndHashCode(callSuper = true)//自动生成属性的 equals() 和 hashCode()方法,同时声明允许使用用父类的属性和方法
    public class Computer extends BaseEntity {
        /**
         * 中央处理器
         */
        private String cpu;
        /**
         * 内存
         */
        private String memory;
        /**
         * GPU
         */
        private String gpu;
        /**
         * 固态硬盘
         */
        private String ssd;
    }
    

    实现示例:

        /**
         * JavaBean 转 JsonObject
         */
        @Test
        public void javaBeanToJsonObject(){
            Computer computer = new Computer();
            computer.setCpu("r7-4800h");
            computer.setGpu("RTX-3060");
            computer.setSsd("512GB");
            computer.setMemory("32GB");
            JSONObject jsonObject = (JSONObject) JSONObject.toJSON(computer);
            log.info("------结果内容:{} 类型为:{}------", jsonObject, jsonObject.getClass());
        }
    

    转换结果:

    JavaBean 转 JsonObject

    2.2 JavaBean 转 Json 字符串

    实现示例:

        /**
         * JavaBean 转 Json 字符串
         */
        @Test
        public void javaBeanToJsonString(){
            Computer computer = new Computer();
            computer.setCpu("r7-4800h");
            computer.setGpu("RTX-3060");
            computer.setSsd("512GB");
            computer.setMemory("32GB");
            String jsonStr = JSON.toJSONString(computer);
            log.info("------结果内容:{} 类型为:{}------", jsonStr, jsonStr.getClass());
        }
    

    转换结果:

    JavaBean 转 Json 字符串

    2.3 List 转 JsonArray

    实现示例:

        /**
         * List 转 JsonArray
         */
        @Test
        public void listToJsonArray(){
            List list = computerService.list();
            JSONArray jsonArray = (JSONArray)JSONArray.toJSON(list);
            log.info("------结果内容1:{} 类型为:{}------", jsonArray.get(0), jsonArray.getClass());
            log.info("------结果内容1:{} 类型为:{}------", jsonArray.get(1), jsonArray.getClass());
            log.info("------结果内容1:{} 类型为:{}------", jsonArray.get(2), jsonArray.getClass());
        }
    

    转换结果:

    List 转 JsonArray

    2.4 List 转Json 字符串

    实现示例:

        /**
         * List 转 Json 字符串
         */
        @Test
        void listToJsonStr() {
            List list = new ArrayList<>();
            Computer computerOne = new Computer();
            computerOne.setCpu("r7-4800h");
            computerOne.setGpu("RTX-3060");
            computerOne.setSsd("512GB");
            list.add(computerOne);
            Computer computerTwo = new Computer();
            computerTwo.setCpu("i5-12600k");
            computerTwo.setGpu("RTX-3060Ti");
            computerTwo.setSsd("512GB");
            list.add(computerTwo);
            String listJson = JSON.toJSONString(list);
            System.out.println(listJson);
        }
    

    转换结果:

    List 转 Json 字符串

    2.5Map 转 Json 字符串

    实现示例:

        /**
         * Map 转 Json 字符串
         */
        @Test
        void mapToJsonStr(){
            Map map = new HashMap<>();
            map.put("key1","AAA");
            map.put("key2","bbb");
            map.put("key3","CCC");
            String mapJson = JSON.toJSONString(map);
            System.out.println("mapJson:" + mapJson);
        }
    

    转换结果:

    Map 转 Json 字符串

    三、JSON 相关 -> 其它类型

    3.1 Json 字符串转 JavaBean

    实现示例:

        /**
         * Json 字符串转 JavaBean
         */
        @Test
        void jsonStrToJavaBean(){
            Computer computer = new Computer();
            computer.setCpu("r7-4800h");
            computer.setGpu("RTX-3060");
            computer.setSsd("512GB");
            computer.setMemory("32GB");
            String jsonStr = JSON.toJSONString(computer);
            System.out.println(jsonStr);
            Computer result = JSONObject.parseObject(jsonStr, Computer.class);
            System.out.println(result);
        }
    

    转换结果:

    Json 字符串转 JavaBean

    3.2 Json 字符串转 JsonObject

    实现示例:

        /**
         * Json 字符串转 JsonObject
         */
        @Test
        void jsonStrToJsonObject() {
            String jsonStr = "{ 
                         \"activityId\": \"871047729944117248\",\n" +
                    "    \"activityType\": \"OA\",\n" +
                    "    \"awardId\": \"886982449056579584\",\n" +
                    "    \"awardName\": \"OA测试\" }";
            JSONObject parse = JSONObject.parseObject(jsonStr);
            System.out.println(parse.getString("activityId"));
        }
    

    转换结果:

    Json 字符串转 JsonObject

    3.3 Json 字符串转 List

    实现示例:

        /**
         * Json 字符串转 List
         */
        @Test
        void jsonStrToList(){
            String jsonStr = "[{ \"activityId\": \"871047729944117248\",\n" +
                    "    \"activityType\": \"OA\",\n" +
                    "    \"awardId\": \"886982449056579584\",\n" +
                    "    \"awardName\": \"OA测试\" }]";
            List maps = JSONArray.parseArray(jsonStr, Map.class);
            maps.forEach(System.out::println);
        }
    

    转换结果:

    Json 字符串转 List

    3.4Json字符串转Map

    实现示例:

        /**
         * Json 字符串转 Map
         */
        @Test
        void jsonStrToMap(){
            String jsonStr = "{\"AA\": 1,\"BB\":2,\"CC\":3}";
            Map map = JSONObject.parseObject(jsonStr, Map.class);
            map.forEach((o1, o2) -> System.out.println(o1 + "=" + o2));
        }
    

    转换结果:

    Json 字符串转 Map

    四、Json 相关互转

    4.1 Json 数组字符串转 JsonArray

    实现示例:

        /**
         * Json 数组字符串转 JsonArray
         */
        @Test
        void jsonStrToJsonArray() {
            JSONArray jsonArray = new JSONArray();
            //初始化一个 Java 对象
            Computer computer = new Computer();
            computer.setCpu("r7-4800h");
            computer.setGpu("RTX-3060");
            computer.setSsd("512GB");
            //初始化一个 JSONObject 对象
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("AAA", 100);
            //将上述两个对象都丢到 JSONArray 对象中,即 JSONArray 不是一般的数组,是可以放各种 Object 到一个 JSONArray 对象里的
            jsonArray.add(computer);
            jsonArray.add(jsonObject);
            String str = JSONArray.toJSONString(jsonArray);
            System.out.println(str);
            String jsonArrStr = "[{\"cpu\" : \"r7-4800h\",\"gpu\" : \"RTX-3060\"},{\"cpu\" : \"i5-12600K\",\"gpu\" : \"RTX-3060Ti\"}]";
            JSONArray result = JSONArray.parseArray(jsonArrStr);
            result.forEach(o -> System.out.println(o.toString()));
        }
    

    转换结果:

    Json 数组字符串转 JsonArray

    4.2 JsonObject 转 Json字符串

    实现示例:

        /**
         * JsonObject 转 Json字符串
         */
        @Test
        void jsonObjectToJsonStr() {
            JSONObject jsonObject = new JSONObject();
            //初始化一个 Java 对象
            Computer computer = new Computer();
            computer.setCpu("r7-4800h");
            computer.setGpu("RTX-3060");
            computer.setSsd("512GB");
            jsonObject.put("computer", computer);
            String jsonStr = JSON.toJSONString(jsonObject);
            System.out.println(jsonStr);
        }
    

    转换结果:

    JsonObject 转 Json字符串

    五、文章小结

    关于 Json 格式的介绍和日常开发中的 Json 转换经验大全就分享到这里。如果文章有错误和不足,还期待大家的指正。或者大家有什么其它补充,也欢迎在评论区交流!

  • 相关阅读:
    COPU陆首群教授应邀在ApacheCon Asia会议上致辞
    ORA-27090: Unable to reserve kernel resources for asynchronous disk I/O
    【JQ _DOM】DOM
    前端优化渲染:长列表渲染
    Android遗漏的动画-矢量动画AnimatedVectorDrawable(上)
    python图形界面化编程GUI(六)坦克大战(二)
    uni.showLoading代替
    链表内指定区间反转
    2021美亚团队赛复盘
    dell 720 服务器错误代码提示
  • 原文地址:https://www.cnblogs.com/CodeBlogMan/p/18022825