王國慶 发表于 2024-5-13 18:09:07

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

目录

[*]前言
[*]一、JSON 回顾

[*]1.1结构情势

[*]二、别的范例 -> JSON相干

[*]2.1 JavaBean 转 JsonObject
[*]2.2 JavaBean 转 Json 字符串
[*]2.3 List 转 JsonArray
[*]2.4 List 转Json 字符串
[*]2.5Map 转 Json 字符串

[*]三、JSON 相干 -> 别的范例

[*]3.1 Json 字符串转 JavaBean
[*]3.2 Json 字符串转 JsonObject
[*]3.3 Json 字符串转 List
[*]3.4Json字符串转Map

[*]四、Json 相干互转

[*]4.1 Json 数组字符串转 JsonArray
[*]4.2 JsonObject 转 Json字符串

[*]五、文章小结

前言

JSON 是 JavaScript 数据范例中的一个子集,目前主流的浏览器都使用了通用的 JavaScript 引擎组件,以是在解析 JSON 格式时具有良好的兼容性。这便是 “JavaScript Object Notation”(缩写为 JSON )诞生的由来。
本文按照我们的输入和输出效果范例进行分类,包括从别的范例转换到 JSON 相干,以及从 JSON 相干转换到别的范例这两大类。
注:以下都是基于阿里的 fastjson 来讲解操作的。
fastjson 可以将 JSON Parse 的性能提升到极致,是目前 Java 语言中最快的 JSON 库。fastjson接口简朴易用,已经被广泛使用在缓存序列化、协议交互、Web 输出、Android 客户端等多种应用场景。
<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 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());
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220115803779-1723494728.pngJavaBean 转 JsonObject2.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());
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220115933074-884626912.pngJavaBean 转 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());
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220120009176-222320969.pngList 转 JsonArray2.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);
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220120043978-2145108218.pngList 转 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);
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220120118843-1937941545.pngMap 转 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);
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220120151195-106717494.pngJson 字符串转 JavaBean3.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"));
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220120228425-434243971.pngJson 字符串转 JsonObject3.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);
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220120258941-1589853995.pngJson 字符串转 List3.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));
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220120336738-1113722032.pngJson 字符串转 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()));
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220120413884-1729555014.pngJson 数组字符串转 JsonArray4.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);
    }转换效果:
https://img2024.cnblogs.com/blog/2458865/202402/2458865-20240220120448134-576266871.pngJsonObject 转 Json字符串五、文章小结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【主流技能】日常工作中关于 JSON 转换的经验大全(Java)