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

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

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

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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月21日
下一篇 2023年12月21日

相关推荐