Java如何快速读取解析JSON数据(文件),获取想要的内容?

编程入门 行业动态 更新时间:2024-10-11 01:15:15

Java如何<a href=https://www.elefans.com/category/jswz/34/1771431.html style=快速读取解析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数据(文件),获取想要的内容?

本文发布于:2023-11-16 19:03:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1631232.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:快速   文件   内容   数据   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!