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

打印 上一主题 下一主题

主题 928|帖子 928|积分 2788

目录

前言

JSON 是 JavaScript 数据范例中的一个子集,目前主流的浏览器都使用了通用的 JavaScript 引擎组件,以是在解析 JSON 格式时具有良好的兼容性。这便是 “JavaScript Object Notation”(缩写为 JSON )诞生的由来。
本文按照我们的输入和输出效果范例进行分类,包括从别的范例转换到 JSON 相干,以及从 JSON 相干转换到别的范例这两大类。
注:以下都是基于阿里的 fastjson 来讲解操作的。
fastjson 可以将 JSON Parse 的性能提升到极致,是目前 Java 语言中最快的 JSON 库。fastjson接口简朴易用,已经被广泛使用在缓存序列化、协议交互、Web 输出、Android 客户端等多种应用场景。
  1. <dependency>
  2.     <groupId>com.alibaba</groupId>
  3.     <artifactId>fastjson</artifactId>
  4.     <version>1.2.83</version>
  5. </dependency>
复制代码
一、JSON 回顾

在开始分享文章的重要内容前,我们可以先回顾一下关于 JSON 的底子知识。
1.1结构情势

JSON 有键值对情势和数组情势这2种结构情势。
以下这个例子就是键值对范例的:
  1. {
  2.     "playerInfo": {
  3.         "playerName": "Alex",
  4.         "playerAge": 18
  5.     },
  6.     "activityId": "871047729944117248",
  7.     "activityType": "OA",
  8.     "awardId": "886982449056579584",
  9.     "awardName": "OA测试",
  10.     "stageId": "816982449034752351",
  11.     "roundId": "808657473445768946",
  12.     "noticeTypes": "APP"
  13. }
复制代码
这种结构的 JSON 数据规则是:一个无序的 "key" : "value" 集合,一个 JSON 对象以 { 左括号开始,以 } 右括号竣事。每个 "key" 后跟一个英文的 : 冒号,每个"key" : "value"之间使用英文的 , 逗号进行分隔。而每个 JSON 对象是可以嵌套的。
那 JSON 的数组情势又是怎么样的呢?下面同样再举一个例子:
  1. {
  2.     "data": {
  3.         "content": [
  4.             {
  5.                 "id": "926160574061371392",
  6.                 "status": "PROGRESSING",
  7.                 "updateContent": "测试一下",
  8.                 "version": "10.6.0",
  9.                 "createTime": "2023-10-31 17:11:28"
  10.             },
  11.             {
  12.                 "id": "926160574061371326",
  13.                 "status": "CANCELED",
  14.                 "updateContent": "测试测试",
  15.                 "version": "123.0",
  16.                 "createTime": "2023-10-31 17:11:28"
  17.             }
  18.         ]
  19.     },
  20.     "code": 200,
  21.     "msg": "成功",
  22.     "success": true
  23. }
复制代码
数组情势的 JSON 数据就是值(value)的有序集合。一个数组以 [ 左中括号开始, ] 右中括号竣事。值之间使用 , 逗号分隔。
二、别的范例 -> JSON相干

这里的别的范例,包括 Java 对象、数组、String 字符串、泛型的  以及 Object 对象等;JSON相干表示 Json 对象、Json 字符串等。
2.1 JavaBean 转 JsonObject

实体类如下:
  1. @Data
  2. @EqualsAndHashCode(callSuper = true)//自动生成属性的 equals() 和 hashCode()方法,同时声明允许使用用父类的属性和方法
  3. public class Computer extends BaseEntity {
  4.     /**
  5.      * 中央处理器
  6.      */
  7.     private String cpu;
  8.     /**
  9.      * 内存
  10.      */
  11.     private String memory;
  12.     /**
  13.      * GPU
  14.      */
  15.     private String gpu;
  16.     /**
  17.      * 固态硬盘
  18.      */
  19.     private String ssd;
  20. }
复制代码
实现示例:
  1.     /**
  2.      * JavaBean 转 JsonObject
  3.      */
  4.     @Test
  5.     public void javaBeanToJsonObject(){
  6.         Computer computer = new Computer();
  7.         computer.setCpu("r7-4800h");
  8.         computer.setGpu("RTX-3060");
  9.         computer.setSsd("512GB");
  10.         computer.setMemory("32GB");
  11.         JSONObject jsonObject = (JSONObject) JSONObject.toJSON(computer);
  12.         log.info("------结果内容:{} 类型为:{}------", jsonObject, jsonObject.getClass());
  13.     }
复制代码
转换效果:
JavaBean 转 JsonObject2.2 JavaBean 转 Json 字符串

实现示例:
  1.     /**
  2.      * JavaBean 转 Json 字符串
  3.      */
  4.     @Test
  5.     public void javaBeanToJsonString(){
  6.         Computer computer = new Computer();
  7.         computer.setCpu("r7-4800h");
  8.         computer.setGpu("RTX-3060");
  9.         computer.setSsd("512GB");
  10.         computer.setMemory("32GB");
  11.         String jsonStr = JSON.toJSONString(computer);
  12.         log.info("------结果内容:{} 类型为:{}------", jsonStr, jsonStr.getClass());
  13.     }
复制代码
转换效果:
JavaBean 转 Json 字符串2.3 List 转 JsonArray

实现示例:
  1.     /**
  2.      * List 转 JsonArray
  3.      */
  4.     @Test
  5.     public void listToJsonArray(){
  6.         List<Computer> list = computerService.list();
  7.         JSONArray jsonArray = (JSONArray)JSONArray.toJSON(list);
  8.         log.info("------结果内容1:{} 类型为:{}------", jsonArray.get(0), jsonArray.getClass());
  9.         log.info("------结果内容1:{} 类型为:{}------", jsonArray.get(1), jsonArray.getClass());
  10.         log.info("------结果内容1:{} 类型为:{}------", jsonArray.get(2), jsonArray.getClass());
  11.     }
复制代码
转换效果:
List 转 JsonArray2.4 List 转Json 字符串

实现示例:
  1.     /**
  2.      * List 转 Json 字符串
  3.      */
  4.     @Test
  5.     void listToJsonStr() {
  6.         List<Computer> list = new ArrayList<>();
  7.         Computer computerOne = new Computer();
  8.         computerOne.setCpu("r7-4800h");
  9.         computerOne.setGpu("RTX-3060");
  10.         computerOne.setSsd("512GB");
  11.         list.add(computerOne);
  12.         Computer computerTwo = new Computer();
  13.         computerTwo.setCpu("i5-12600k");
  14.         computerTwo.setGpu("RTX-3060Ti");
  15.         computerTwo.setSsd("512GB");
  16.         list.add(computerTwo);
  17.         String listJson = JSON.toJSONString(list);
  18.         System.out.println(listJson);
  19.     }
复制代码
转换效果:
List 转 Json 字符串2.5Map 转 Json 字符串

实现示例:
  1.     /**
  2.      * Map 转 Json 字符串
  3.      */
  4.     @Test
  5.     void mapToJsonStr(){
  6.         Map<String, Object> map = new HashMap<>();
  7.         map.put("key1","AAA");
  8.         map.put("key2","bbb");
  9.         map.put("key3","CCC");
  10.         String mapJson = JSON.toJSONString(map);
  11.         System.out.println("mapJson:" + mapJson);
  12.     }
复制代码
转换效果:
Map 转 Json 字符串三、JSON 相干 -> 别的范例

3.1 Json 字符串转 JavaBean

实现示例:
  1.     /**
  2.      * Json 字符串转 JavaBean
  3.      */
  4.     @Test
  5.     void jsonStrToJavaBean(){
  6.         Computer computer = new Computer();
  7.         computer.setCpu("r7-4800h");
  8.         computer.setGpu("RTX-3060");
  9.         computer.setSsd("512GB");
  10.         computer.setMemory("32GB");
  11.         String jsonStr = JSON.toJSONString(computer);
  12.         System.out.println(jsonStr);
  13.         Computer result = JSONObject.parseObject(jsonStr, Computer.class);
  14.         System.out.println(result);
  15.     }
复制代码
转换效果:
Json 字符串转 JavaBean3.2 Json 字符串转 JsonObject

实现示例:
  1.     /**
  2.      * Json 字符串转 JsonObject
  3.      */
  4.     @Test
  5.     void jsonStrToJsonObject() {
  6.         String jsonStr = "{
  7.                      "activityId": "871047729944117248",\n" +
  8.                 "    "activityType": "OA",\n" +
  9.                 "    "awardId": "886982449056579584",\n" +
  10.                 "    "awardName": "OA测试" }";
  11.         JSONObject parse = JSONObject.parseObject(jsonStr);
  12.         System.out.println(parse.getString("activityId"));
  13.     }
复制代码
转换效果:
Json 字符串转 JsonObject3.3 Json 字符串转 List

实现示例:
  1.     /**
  2.      * Json 字符串转 List
  3.      */
  4.     @Test
  5.     void jsonStrToList(){
  6.         String jsonStr = "[{ "activityId": "871047729944117248",\n" +
  7.                 "    "activityType": "OA",\n" +
  8.                 "    "awardId": "886982449056579584",\n" +
  9.                 "    "awardName": "OA测试" }]";
  10.         List<Map> maps = JSONArray.parseArray(jsonStr, Map.class);
  11.         maps.forEach(System.out::println);
  12.     }
复制代码
转换效果:
Json 字符串转 List3.4Json字符串转Map

实现示例:
  1.     /**
  2.      * Json 字符串转 Map
  3.      */
  4.     @Test
  5.     void jsonStrToMap(){
  6.         String jsonStr = "{"AA": 1,"BB":2,"CC":3}";
  7.         Map map = JSONObject.parseObject(jsonStr, Map.class);
  8.         map.forEach((o1, o2) -> System.out.println(o1 + "=" + o2));
  9.     }
复制代码
转换效果:
Json 字符串转 Map四、Json 相干互转

4.1 Json 数组字符串转 JsonArray

实现示例:
  1.     /**
  2.      * Json 数组字符串转 JsonArray
  3.      */
  4.     @Test
  5.     void jsonStrToJsonArray() {
  6.         JSONArray jsonArray = new JSONArray();
  7.         //初始化一个 Java 对象
  8.         Computer computer = new Computer();
  9.         computer.setCpu("r7-4800h");
  10.         computer.setGpu("RTX-3060");
  11.         computer.setSsd("512GB");
  12.         //初始化一个 JSONObject 对象
  13.         JSONObject jsonObject = new JSONObject();
  14.         jsonObject.put("AAA", 100);
  15.         //将上述两个对象都丢到 JSONArray 对象中,即 JSONArray 不是一般的数组,是可以放各种 Object 到一个 JSONArray 对象里的
  16.         jsonArray.add(computer);
  17.         jsonArray.add(jsonObject);
  18.         String str = JSONArray.toJSONString(jsonArray);
  19.         System.out.println(str);
  20.         String jsonArrStr = "[{"cpu" : "r7-4800h","gpu" : "RTX-3060"},{"cpu" : "i5-12600K","gpu" : "RTX-3060Ti"}]";
  21.         JSONArray result = JSONArray.parseArray(jsonArrStr);
  22.         result.forEach(o -> System.out.println(o.toString()));
  23.     }
复制代码
转换效果:
Json 数组字符串转 JsonArray4.2 JsonObject 转 Json字符串

实现示例:
  1.     /**
  2.      * JsonObject 转 Json字符串
  3.      */
  4.     @Test
  5.     void jsonObjectToJsonStr() {
  6.         JSONObject jsonObject = new JSONObject();
  7.         //初始化一个 Java 对象
  8.         Computer computer = new Computer();
  9.         computer.setCpu("r7-4800h");
  10.         computer.setGpu("RTX-3060");
  11.         computer.setSsd("512GB");
  12.         jsonObject.put("computer", computer);
  13.         String jsonStr = JSON.toJSONString(jsonObject);
  14.         System.out.println(jsonStr);
  15.     }
复制代码
转换效果:
JsonObject 转 Json字符串五、文章小结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表