快速读取解析JSON数据(文件),获取想要的内容?"/>
Java如何快速读取解析JSON数据(文件),获取想要的内容?
手打不易,如果转摘,请注明出处!
注明原文:
目录
前言
准备工作
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@Datapublic 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@Datapublic static class SchoolListBean {/*** id : 1* name : 岭南一中* studentList : [{"name":"zhangxiaofan","age":15}]*/private int id;private String name;private List<StudentListBean> studentList;@NoArgsConstructor@Datapublic static class StudentListBean {/*** name : zhangxiaofan* age : 15*/private String name;private int age;}}}
}
第四步:读取Json文件,提取目标数据
假设我们想知道每个学校,有哪些学生(姓名)。
import com.alibaba.fastjson.JSONObject;import org.apachemons.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文件,快速获取我们想要的内容!
如果文件特别大,可以考虑多线程的方式处理。
更多推荐
Java如何快速读取解析JSON数据(文件),获取想要的内容?
发布评论