马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
手打不易,如果转摘,请注明出处!
注明原文:
目次
媒介
预备工作
Json数据(示例)
分析Json文件
第一步:创建一个空类
第二步:使用 Gsonformat 插件
第三步:复制Json内容,创建对应类
第四步:读取Json文件,提取目标数据
总结
媒介
工作做,偶然候会碰到一些复杂的Json格式数据(复杂的数据一样平常都是json.file文件),大部门字段大概对我们没有效,因此我们须要去自动格式化,只提取大概过滤我们想要的数据。
预备工作
开辟工具:intellij idea
插件:Gsonformat
下载所在如下:
Gsonformat - IntelliJ IDEs Plugin | Marketplace
直接在idea,通过 Plugins 安装即可。
maven 依赖:
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.11.0</version>
- </dependency>
复制代码 Json数据(示例)
Json文件数据示例:
文件路径:
- src/main/resources/jsonfile/test.json
复制代码
文件名: test.json
文件内容:
- {
- "code": 200,
- "msg": "成功",
- "data": [
- {
- "id": 1,
- "version": "2",
- "schoolList": [
- {
- "id": 1,
- "name": "岭南一中",
- "studentList": [
- {
- "name": "zhangxiaofan",
- "age": 15
- },
- {
- "name": "wangwu",
- "age": 16
- }
- ]
- },
- {
- "id": 2,
- "name": "实验中学",
- "studentList": [
- {
- "name": "lisi",
- "age": 16
- },
- {
- "name": "zhaoliu",
- "age": 15
- }
- ]
- }
- ],
- "flag": true
- }
- ]
- }
复制代码 分析Json文件
第一步:创建一个空类
- public class MyJsonObject {
-
-
- }
复制代码 第二步:使用 Gsonformat 插件
空缺处点击右键,选择 Generator ,然后选择
第三步:复制Json内容,创建对应类
注意:我们不须要把整个Json内容复制进去,数据量很大的情况下,会卡死。
比方:我们要分析的Json格式含有很多List对象,那么我们只需拷贝List中的一个单位数据(Object)即可,由于格式是固定的。比方我们只需拷贝下面的内容来创建bean就行。
- {
- "code": 200,
- "msg": "成功",
- "data": [{
- "id": 1,
- "version": "2",
- "schoolList": [{
- "id": 1,
- "name": "岭南一中",
- "studentList": [{
- "name": "zhangxiaofan",
- "age": 15
- }]
- }],
- "flag": true
- }]
- }
复制代码 点击确定后,会自动帮我们创建好对应的POJO类
- @NoArgsConstructor
- @Data
- public class MyJsonObject {
- /**
- * code : 200
- * msg : 成功
- * data : [{"id":1,"version":"2","schoolList":[{"id":1,"name":"岭南一中","studentList":[{"name":"zhangxiaofan","age":15}]}],"flag":true}]
- */
- private int code;
- private String msg;
- private List<DataBean> data;
- @NoArgsConstructor
- @Data
- public static class DataBean {
- /**
- * id : 1
- * version : 2
- * schoolList : [{"id":1,"name":"岭南一中","studentList":[{"name":"zhangxiaofan","age":15}]}]
- * flag : true
- */
- private int id;
- private String version;
- private boolean flag;
- private List<SchoolListBean> schoolList;
- @NoArgsConstructor
- @Data
- public static class SchoolListBean {
- /**
- * id : 1
- * name : 岭南一中
- * studentList : [{"name":"zhangxiaofan","age":15}]
- */
- private int id;
- private String name;
- private List<StudentListBean> studentList;
- @NoArgsConstructor
- @Data
- public static class StudentListBean {
- /**
- * name : zhangxiaofan
- * age : 15
- */
- private String name;
- private int age;
- }
- }
- }
- }
复制代码 第四步:读取Json文件,提取目标数据
假设我们想知道每个学校,有哪些门生(姓名)。
- import com.alibaba.fastjson.JSONObject;
- import org.apache.commons.io.FileUtils;
- import java.io.File;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
- public class Test {
- public static final String JSON_PATH = "E:\\JavaProject\\local\\JavaCoreTest\\src\\main\\resources\\jsonfile\\test.json";
- public static void main(String[] args) throws IOException {
- Set<String> url = new HashSet<>();
- List<String> urlArray = new ArrayList<>();
- File file = new File(JSON_PATH);
- String content = FileUtils.readFileToString(file, "UTF-8");
- MyJsonObject myJsonObject = JSONObject.parseObject(content, MyJsonObject.class);
- // 数据
- List<MyJsonObject.DataBean> data = myJsonObject.getData();
- for (MyJsonObject.DataBean dataBean : data) {
- for (MyJsonObject.DataBean.SchoolListBean school : dataBean.getSchoolList()) {
- // 学校名
- String schoolName = school.getName();
- for (MyJsonObject.DataBean.SchoolListBean.StudentListBean student : school.getStudentList()) {
- // 学生姓名
- String studentName = student.getName();
- System.out.println("学校:" + schoolName + ",有学生:" + studentName);
- }
- }
- }
- }
- }
复制代码 实行结果:
- Connected to the target VM, address: '127.0.0.1:35240', transport: 'socket'
- 学校:岭南一中,有学生:zhangxiaofan
- 学校:岭南一中,有学生:wangwu
- 学校:实验中学,有学生:lisi
- 学校:实验中学,有学生:zhaoliu
复制代码 总结
按照上面的方法,我们可以快速的提取复杂的Json文件,快速获取我们想要的内容!
如果文件特别大,可以思量多线程的方式处理处罚。
|