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

目录

  • 前言
  • [一、JSON 回顾](#一、JSON 回顾)
  • [二、其它类型 -> JSON相关](#二、其它类型 -> JSON相关)
    • [2.1 JavaBean 转 JsonObject](#2.1 JavaBean 转 JsonObject)
    • [2.2 JavaBean 转 Json 字符串](#2.2 JavaBean 转 Json 字符串)
    • [2.3 List 转 JsonArray](#2.3 List 转 JsonArray)
    • [2.4 List 转Json 字符串](#2.4 List 转Json 字符串)
    • [2.5Map 转 Json 字符串](#2.5Map 转 Json 字符串)
  • [三、JSON 相关 -> 其它类型](#三、JSON 相关 -> 其它类型)
    • [3.1 Json 字符串转 JavaBean](#3.1 Json 字符串转 JavaBean)
    • [3.2 Json 字符串转 JsonObject](#3.2 Json 字符串转 JsonObject)
    • [3.3 Json 字符串转 List](#3.3 Json 字符串转 List)
    • 3.4Json字符串转Map
  • [四、Json 相关互转](#四、Json 相关互转)
    • [4.1 Json 数组字符串转 JsonArray](#4.1 Json 数组字符串转 JsonArray)
    • [4.2 JsonObject 转 Json字符串](#4.2 JsonObject 转 Json字符串)
  • 五、文章小结

前言

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

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

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

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

xml 复制代码
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

一、JSON 回顾

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

1.1结构形式

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

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

json 复制代码
{
    "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 的数组形式又是怎么样的呢?下面同样再举一个例子:

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

实体类如下:

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

实现示例:

java 复制代码
    /**
     * 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 字符串

实现示例:

java 复制代码
    /**
     * 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

实现示例:

java 复制代码
    /**
     * List 转 JsonArray
     */
    @Test
    public void listToJsonArray(){
        List<Computer> 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 字符串

实现示例:

java 复制代码
    /**
     * List 转 Json 字符串
     */
    @Test
    void listToJsonStr() {
        List<Computer> 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 字符串

实现示例:

java 复制代码
    /**
     * Map 转 Json 字符串
     */
    @Test
    void mapToJsonStr(){
        Map<String, Object> 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

实现示例:

java 复制代码
    /**
     * 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

实现示例:

java 复制代码
    /**
     * 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

实现示例:

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

转换结果:

Json 字符串转 List

3.4Json字符串转Map

实现示例:

java 复制代码
    /**
     * 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

实现示例:

java 复制代码
    /**
     * 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字符串

实现示例:

java 复制代码
    /**
     * 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 转换经验大全就分享到这里。如果文章有错误和不足,还期待大家的指正。或者大家有什么其它补充,也欢迎在评论区交流!

相关推荐
非 白7 分钟前
【Java】代理模式
java·开发语言·代理模式
Good Note17 分钟前
Golang的静态强类型、编译型、并发型
java·数据库·redis·后端·mysql·面试·golang
我就是我3521 小时前
记录一次SpringMVC的406错误
java·后端·springmvc
向哆哆1 小时前
Java应用程序的跨平台性能优化研究
java·开发语言·性能优化
ekkcole2 小时前
windows使用命令解压jar包,替换里面的文件。并重新打包成jar包,解决Failed to get nested archive for entry
java·windows·jar
handsomestWei2 小时前
java实现多图合成mp4和视频附件下载
java·开发语言·音视频·wutool·图片合成视频·视频附件下载
全栈若城2 小时前
03 Python字符串与基础操作详解
java·开发语言·python
伯牙碎琴2 小时前
二、Spring Framework基础:IoC(控制反转)和DI(依赖注入)
java·spring·log4j
菲力蒲LY2 小时前
输入搜索、分组展示选项、下拉选取,全局跳转页,el-select 实现 —— 后端数据处理代码,抛砖引玉展思路
java·前端·mybatis
南宫生3 小时前
力扣每日一题【算法学习day.130】
java·学习·算法·leetcode