菜鸟笔记
提升您的技术认知

json格式化

我们在代码开发的时候,经常会遇到一些json格式化问题,比如说下面俩种

{
  "code": 200,
  "success": true,
  "data": [
    {
  
      "name": "张三",
      "age": 22,
      "gender": "男"
    },
    {
  
      "name": "李四",
      "age": 19,
      "gender": "女"
    },
    {
  
      "name": "王五",
      "age": 34,
      "gender": "男"
    },
    {
  
      "name": "赵六",
      "age": 30,
      "gender": "男"
    },
    {
  
      "name": "田七",
      "age": 25,
      "gender": "女"
    }
  ],
  "msg": "操作成功"}

{
  
  "code": 200,
  "success": true,
  "data": {
  
    "current": 2,
    "hitCount": false,
    "optimizeCountSql": true,
    "orders": "",
    "pager": 1,
    "records": [
      {
  
        "name": "张三",
        "age": 22,
        "gender": "男"
      },
      {
  
        "name": "李四",
        "age": 19,
        "gender": "女"
      },
      {
  
        "name": "王五",
        "age": 34,
        "gender": "男"
      },
      {
  
        "name": "赵六",
        "age": 30,
        "gender": "男"
      },
      {
  
        "name": "田七",
        "age": 25,
        "gender": "女"
      }
    ],
    "searchCount": false,
    "size": 10,
    "total": 20
  },
  "msg": "操作成功"
}

其实俩个json传递的都是同一个数据对象,只不过外面包了一层或者俩层结构罢了,难道我们要为它创建俩个数据转化对象,no,no,no,我的强迫症不允许我这么做,所以我提供了一个万能的json格式化方法,可以解析任何层次的json数据,废话不多说,上代码。

1.到入json格式化依赖(这是谷歌的一个json格式化包)版本任选

 <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
 <dependency>
     <groupId>com.google.code.gson</groupId>
     <artifactId>gson</artifactId>
     <version>2.8.0</version>
 </dependency>
 <!--lombak工具(可选)-->
 <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.10</version>
    <scope>provided</scope>
  </dependency>

2.实体类(数据封装第一层的实体类)

/**
 * 数据传输的第一层封装
 *
 * @author WangHuan
 * @date 2021/10/27 17:39
 */
@Data
public class BaseDataBean<T> {
  

    private String code;
    private boolean success;
    private T data;
    private String msg;

}
具体数据实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person implements Serializable {
  

    private String name;
    private Integer age;
    private String gender;

}

3.格式化代码


    //json化对象
    Gson gson = new Gson();
    //这俩步获取json字符串
    File file = new File("D:\\workspace\\idea\\workStudy\\test\\src\\main\\java\\com\\wh\\1.json");
    String string = FileUtils.readFileToString(file);
	//格式化操作
    BaseDataBean<List<Person>> listR = gson.fromJson(string,
            new TypeToken<BaseDataBean<List<Person>>>() {
  }.getType());
    System.out.println(listR);

结果

这是dugger出来的数据结构。

4.用法

俩层的我就直接上代码了

第二层封装对象

/**
 * 数据传输的第二层封装(可选择的)
 *
 * @author WangHuan
 * @date 2021/10/27 17:41
 */
@Data
public class DataBean<T> {
  

    private int current;
    private boolean hitCount;
    private boolean optimizeCountSql;
    private String orders;
    private int pager;
    private List<T> records;
    private boolean searchCount;
    private int size;
    private int total;
}

代码

 Gson gson = new Gson();
    File file = new File("D:\\workspace\\idea\\workStudy\\test\\src\\main\\java\\com\\wh\\2.json");
    String string = FileUtils.readFileToString(file);

    BaseDataBean<DataBean<List<Person>>> bean = gson.fromJson(string,
                          new TypeToken<BaseDataBean<DataBean<Person>>>() {
  }.getType());
    System.out.println(bean);

效果图

如果有问题大家可以评论或者私信都可以,如果有作用,请大家给个赞,支持作者,谢谢各位。
本篇博客到此结束,可能有一些描述不好或者不准确的地方,请见谅。