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

news2025/5/24 1:08:58

手打不易,如果转摘,请注明出处!

注明原文:https://zhangxiaofan.blog.csdn.net/article/details/132764186


目录

前言

准备工作

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文件,快速获取我们想要的内容!

如果文件特别大,可以考虑多线程的方式处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1170018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0-1背包 完全背包 + 至多/恰好/至少 + 空间优化 + 常见变形题(实战力扣题)

&#xff08;一&#xff09;01背包 1.回溯三问 # capacity:背包容量 # w[i]: 第 i 个物品的体积 # v[i]: 第 i 个物品的价值 # 返回:所选物品体积和不超过 capacity 的前提下&#xff0c;所能得到的最大价值和 def zero_one_knapsack(capacity:int,w:List[int],v:List[int])…

安装虚拟机后ifconfig不显示IP地址及设置静态IP地址ssh连接

ifconfig不显示IP地址 可以看到ens160并没有显示IP地址&#xff0c;刚刚装好的虚拟机是很干净的&#xff0c;连网卡都没有&#xff0c;我们修改一个配置文件&#xff1a; vim /etc/sysconfig/network-scripts/ifcfg-ens160将文件中的onboot修改为yes&#xff0c;即启动时需不需…

数字频带传输——多进制数字调制及MATLAB仿真

文章目录 前言一、MASK&#xff08;一维信号&#xff09;1、MASK 简介2、MASK 矢量表示 二、MPSK&#xff08;二维信号&#xff09;1、MPSK 简介2、MPSK 矢量表示 三、MQAM&#xff08;二维信号&#xff09;1、MQAM 简介2、MQAM 信号的矢量表示 四、正交 MFSK&#xff08;M维信…

YB2503HV 100V 3A SOP8内置MOS 高效率降压IC(昱灿)

YB2503HV 100V 3A SOP8内置MOS 高效率降压IC 描述&#xff1a; YB2503HV是单片集成可设定输出电流的开关型降压恒压驱动器&#xff0c;可工作在宽输入电压范围具有优良的负载和线性调整度。安全保护机制包括每周期的峰值限流、软启动、过压保护和温度保护。YB2503HV需要非常少…

5W2H分析法:全面思考和解决问题的实用工具

5W2H分析法又叫七问分析法&#xff0c;创于二战中美国陆军兵器修理部。发明者用五个以W开头的英语单词和两个以H开头的英语单词进行设问&#xff0c;发现解决问题的线索&#xff0c;寻找发明思路&#xff0c;进行设计构思&#xff0c;从而搞出新的发明项目。5W2H简单、方便&…

速拿offer,超全自动化测试面试题+答案汇总,背完还怕拿不到offer?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、你会封装自动化…

手机上有哪些支持设置农历日期提醒的工具

很多人的生日都是按照农历日期来安排的&#xff0c;而农历日期和公历日期相错的日子很多&#xff0c;在手机上如果想要记录农历生日提醒&#xff0c;需要借助一些支持设定农历日期的工具来实现。 手机上有哪些支持设置农历日期提醒的工具呢&#xff1f;敬业签是一款可以在手机…

高斯过程回归 | 高斯过程回归(Gaussian Process Regression)

高斯过程回归(Gaussian Process Regression)是一种非参数的回归方法,它基于高斯过程模型来建模数据的分布情况。在高斯过程回归中,假设数据点之间的关系服从多元高斯分布。 具体来说,考虑有一组输入变量X和对应的输出变量Y,我们希望通过这些已知数据点来建立一个模型,进…

K8S知识点(一)

&#xff08;1&#xff09;应用部署方式转变 &#xff08;2&#xff09;K8S介绍 容器部署容易出现编排问题&#xff0c;为了解决就出现了大量的编排软件&#xff0c;这里将的是K8S编排问题的解决佼佼者 弹性伸缩&#xff1a;当流量从1000变为1200可以&#xff0c;自动开启一个…

关于编程语言,开发者眼中的争论与共识

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 联合制作 / RTE开发者社区 xxx 是最好的编程语言&#xff01;此话一出&#xff0c;必能掀起一场技术圈儿…

python图像处理 ——图像锐化

python图像处理 ——图像锐化 前言一、原理二、 空间域锐化滤波1.拉普拉斯算子&#xff08;Laplacian&#xff09;2.罗伯茨算子&#xff08;Roberts&#xff09;3.Sobel算子4.Prewitt算子5.Scharr算子 三、实验对比 前言 由于收集图像数据的器件或传输图像的通道存在一些质量缺…

pip install -r requirements.txt

挂了梯子报错 不挂梯子gg下

橙河网络:坏人是怎么形成的?

小A是一个非常热心的人&#xff0c;给谁帮忙&#xff0c;都免费。 大家都说&#xff0c;小 A&#xff0c;实在人呀&#xff0c;哈哈。 小B搬来了&#xff0c;他活多&#xff0c;弄不过来&#xff0c;常找小 A 来帮忙。 小A 每次来帮忙&#xff0c;小B 都给小A一张大团结(100…

SpringBoot集成Swagger接口文档/测试

文章目录 Swagger 介绍Swagger 使用常用注解 Swagger 介绍 使用 Swagger 你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;就可以做到生成接口文档&#xff0c;以及在线接口调试页面。官网&#xff1a;https://swagger.io/ Knife4j 是为 Java MVC 框架集成 Swagg…

【Python】列表、集合、字典基础知识

列表 列表中元素的类型可以不同&#xff0c;列表内部存储方式是元素值存储在不连续的空间&#xff0c;但是把他们的指针存在一块连续的空间 列表的创建 1.list1[] 创建一个空列表 2.用list函数 3.split函数截取 列表的更新 1.通过索引[]改变 2.切片修改 3.列表方法更新 列表…

SLAM从入门到精通(参数标定)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 标定是slam开发过程中很重要的一个环节。这部分内容涉及到很多方面&#xff0c;比如说传感器、比如说算法、比如说机械&#xff0c;总之好的标定不…

C3P0、DBCP、Druid 三种数据库连接池的使用

文章目录 数据库连接池1 C3P0 数据库连接池2 DBCP 数据库连接池3 Druid 数据库连接池 数据库连接池 JDBC 的数据库连接池使用 javax.sql.DataSource 来表示&#xff0c;DataSource 只是一个接口&#xff0c;该接口通常由服务器(Weblogic, WebSphere, Tomcat)提供实现&#xff…

SpringCloudTencent(上)

SpringCloudTencent 1.PolarisMesh介绍2.北极星具备的功能3.北极星包含的组件4.功能特性1.服务管理1.服务注册2.服务发现3.健康检查 2.配置管理 5.代码实战1.环境准备2.服务注册与发现3.远程调用 1.PolarisMesh介绍 1.北极星是腾讯开源的服务治理平台&#xff0c;致力于解决分…

Dev-C调试的基本方法2-1

在Dev-C中调试程序&#xff0c;首先需要在程序中设置断点&#xff0c;之后以调试的方式运行程序。 1 设置断点 当以调试的方式运行程序时&#xff0c;程序会在断点处停下来。点击要设置断点代码行号左侧部分&#xff0c;此时会有如图1所示的红点和绿色对勾&#xff0c;表示断…

Mybatis与Mybatis-Plus(注解与Xml)(单表与多表)

准备工作 这里我们准备了两个与数据库表对应的实体类&#xff0c;stu为学生表&#xff0c;cls为班级表 类属性上的注解如 TableId等 为Mybatis-Plus的注解&#xff0c;使用mybatis会无视掉这些注解 在Stu 类的最后一个属性我们定义了Cls实体类的对象&#xff0c;对于单表查询&…