日常工作中关于 JSON 转换的经验大全(Java)

2024-03-12 0 3,032

AIner-header\">目录

 

前言

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

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

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

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

<!-- 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种结构形式。

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

{
    "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 JavaBeanJsonObject

实体类如下:

@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());
    }

转换结果:

日常工作中关于 JSON 转换的经验大全(Java)
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());
    }

转换结果:

日常工作中关于 JSON 转换的经验大全(Java)
JavaBean 转 Json 字符串

2.3 List 转 JsonArray

实现示例:

    /**
     * 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());
    }

转换结果:

日常工作中关于 JSON 转换的经验大全(Java)
List 转 JsonArray

2.4 List 转Json 字符串

实现示例:

    /**
     * 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);
    }

转换结果:

日常工作中关于 JSON 转换的经验大全(Java)
List 转 Json 字符串

2.5Map 转 Json 字符串

实现示例:

    /**
     * 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);
    }

转换结果:

日常工作中关于 JSON 转换的经验大全(Java)
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 转换的经验大全(Java)
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 转换的经验大全(Java)
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<Map> maps = JSONArray.parseArray(jsonStr, Map.class);
        maps.forEach(System.out::println);
    }

转换结果:

日常工作中关于 JSON 转换的经验大全(Java)
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 转换的经验大全(Java)
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 转换的经验大全(Java)
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);
    }

转换结果:

日常工作中关于 JSON 转换的经验大全(Java)
JsonObject 转 Json字符串


五、文章小结

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

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 日常工作中关于 JSON 转换的经验大全(Java) http://www.20zxx.cn/816625/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务