Java怎样快速读取&分析JSON数据(文件),获取想要的内容?

[复制链接]
发表于 2026-2-6 16:19:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
手打不易,如果转摘,请注明出处!
注明原文:

目次
媒介
预备工作
Json数据(示例)
分析Json文件
第一步:创建一个空类
第二步:使用 Gsonformat 插件
 第三步:复制Json内容,创建对应类
第四步:读取Json文件,提取目标数据
总结


媒介

工作做,偶然候会碰到一些复杂的Json格式数据(复杂的数据一样平常都是json.file文件),大部门字段大概对我们没有效,因此我们须要去自动格式化,只提取大概过滤我们想要的数据。
预备工作

开辟工具:intellij idea
插件:Gsonformat
下载所在如下:
Gsonformat - IntelliJ IDEs Plugin | Marketplace
直接在idea,通过 Plugins 安装即可。
maven 依赖:
  1.         <dependency>
  2.             <groupId>commons-io</groupId>
  3.             <artifactId>commons-io</artifactId>
  4.             <version>2.11.0</version>
  5.         </dependency>
复制代码
Json数据(示例)

Json文件数据示例:
文件路径:
  1. src/main/resources/jsonfile/test.json
复制代码

文件名: test.json
文件内容:
  1. {
  2.   "code": 200,
  3.   "msg": "成功",
  4.   "data": [
  5.     {
  6.       "id": 1,
  7.       "version": "2",
  8.       "schoolList": [
  9.         {
  10.           "id": 1,
  11.           "name": "岭南一中",
  12.           "studentList": [
  13.             {
  14.               "name": "zhangxiaofan",
  15.               "age": 15
  16.             },
  17.             {
  18.               "name": "wangwu",
  19.               "age": 16
  20.             }
  21.           ]
  22.         },
  23.         {
  24.           "id": 2,
  25.           "name": "实验中学",
  26.           "studentList": [
  27.             {
  28.               "name": "lisi",
  29.               "age": 16
  30.             },
  31.             {
  32.               "name": "zhaoliu",
  33.               "age": 15
  34.             }
  35.           ]
  36.         }
  37.       ],
  38.       "flag": true
  39.     }
  40.   ]
  41. }
复制代码
分析Json文件

第一步:创建一个空类

  1. public class MyJsonObject {
  2.    
  3.    
  4. }
复制代码
第二步:使用 Gsonformat 插件

空缺处点击右键,选择 Generator ,然后选择 

 第三步:复制Json内容,创建对应类


注意:我们不须要把整个Json内容复制进去,数据量很大的情况下,会卡死。
比方:我们要分析的Json格式含有很多List对象,那么我们只需拷贝List中的一个单位数据(Object)即可,由于格式是固定的。比方我们只需拷贝下面的内容来创建bean就行。
  1. {
  2.     "code": 200,
  3.     "msg": "成功",
  4.     "data": [{
  5.         "id": 1,
  6.         "version": "2",
  7.         "schoolList": [{
  8.             "id": 1,
  9.             "name": "岭南一中",
  10.             "studentList": [{
  11.                 "name": "zhangxiaofan",
  12.                 "age": 15
  13.             }]
  14.         }],
  15.         "flag": true
  16.     }]
  17. }
复制代码
点击确定后,会自动帮我们创建好对应的POJO类
  1. @NoArgsConstructor
  2. @Data
  3. public class MyJsonObject {
  4.     /**
  5.      * code : 200
  6.      * msg : 成功
  7.      * data : [{"id":1,"version":"2","schoolList":[{"id":1,"name":"岭南一中","studentList":[{"name":"zhangxiaofan","age":15}]}],"flag":true}]
  8.      */
  9.     private int code;
  10.     private String msg;
  11.     private List<DataBean> data;
  12.     @NoArgsConstructor
  13.     @Data
  14.     public static class DataBean {
  15.         /**
  16.          * id : 1
  17.          * version : 2
  18.          * schoolList : [{"id":1,"name":"岭南一中","studentList":[{"name":"zhangxiaofan","age":15}]}]
  19.          * flag : true
  20.          */
  21.         private int id;
  22.         private String version;
  23.         private boolean flag;
  24.         private List<SchoolListBean> schoolList;
  25.         @NoArgsConstructor
  26.         @Data
  27.         public static class SchoolListBean {
  28.             /**
  29.              * id : 1
  30.              * name : 岭南一中
  31.              * studentList : [{"name":"zhangxiaofan","age":15}]
  32.              */
  33.             private int id;
  34.             private String name;
  35.             private List<StudentListBean> studentList;
  36.             @NoArgsConstructor
  37.             @Data
  38.             public static class StudentListBean {
  39.                 /**
  40.                  * name : zhangxiaofan
  41.                  * age : 15
  42.                  */
  43.                 private String name;
  44.                 private int age;
  45.             }
  46.         }
  47.     }
  48. }
复制代码
第四步:读取Json文件,提取目标数据

假设我们想知道每个学校,有哪些门生(姓名)。
  1. import com.alibaba.fastjson.JSONObject;
  2. import org.apache.commons.io.FileUtils;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.HashSet;
  7. import java.util.List;
  8. import java.util.Set;
  9. public class Test {
  10.     public static final String JSON_PATH = "E:\\JavaProject\\local\\JavaCoreTest\\src\\main\\resources\\jsonfile\\test.json";
  11.     public static void main(String[] args) throws IOException {
  12.         Set<String> url = new HashSet<>();
  13.         List<String> urlArray = new ArrayList<>();
  14.         File file = new File(JSON_PATH);
  15.         String content = FileUtils.readFileToString(file, "UTF-8");
  16.         MyJsonObject myJsonObject = JSONObject.parseObject(content, MyJsonObject.class);
  17.         // 数据
  18.         List<MyJsonObject.DataBean> data = myJsonObject.getData();
  19.         for (MyJsonObject.DataBean dataBean : data) {
  20.             for (MyJsonObject.DataBean.SchoolListBean school : dataBean.getSchoolList()) {
  21.                 // 学校名
  22.                 String schoolName = school.getName();
  23.                 for (MyJsonObject.DataBean.SchoolListBean.StudentListBean student : school.getStudentList()) {
  24.                     // 学生姓名
  25.                     String studentName = student.getName();
  26.                     System.out.println("学校:" + schoolName + ",有学生:" + studentName);
  27.                 }
  28.             }
  29.         }
  30.     }
  31. }
复制代码
实行结果:
  1. Connected to the target VM, address: '127.0.0.1:35240', transport: 'socket'
  2. 学校:岭南一中,有学生:zhangxiaofan
  3. 学校:岭南一中,有学生:wangwu
  4. 学校:实验中学,有学生:lisi
  5. 学校:实验中学,有学生:zhaoliu
复制代码
总结

按照上面的方法,我们可以快速的提取复杂的Json文件,快速获取我们想要的内容!
如果文件特别大,可以思量多线程的方式处理处罚。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表