手打不易,如果轉(zhuǎn)摘,請注明出處!
注明原文:https://zhangxiaofan.blog.csdn.net/article/details/132764186
目錄
前言
準備工作
Json數(shù)據(jù)(示例)
解析Json文件
第一步:創(chuàng)建一個空類
第二步:使用?Gsonformat 插件
?第三步:復制Json內(nèi)容,創(chuàng)建對應類
第四步:讀取Json文件,提取目標數(shù)據(jù)
總結
前言
工作做,有時候會碰到一些復雜的Json格式數(shù)據(jù)(復雜的數(shù)據(jù)一般都是json.file文件),大部分字段可能對我們沒有用,因此我們需要去主動格式化,只提取或者過濾我們想要的數(shù)據(jù)。
準備工作
開發(fā)工具: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數(shù)據(jù)(示例)
Json文件數(shù)據(jù)示例:
文件路徑:
src/main/resources/jsonfile/test.json
文件名: test.json
文件內(nèi)容:
{
"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文件
第一步:創(chuàng)建一個空類
public class MyJsonObject {
}
第二步:使用?Gsonformat 插件
空白處點擊右鍵,選擇 Generator ,然后選擇?
?第三步:復制Json內(nèi)容,創(chuàng)建對應類
注意:我們不需要把整個Json內(nèi)容復制進去,數(shù)據(jù)量很大的情況下,會卡死。
例如:我們要解析的Json格式含有很多List對象,那么我們只需拷貝List中的一個單元數(shù)據(jù)(Object)即可,因為格式是固定的。例如我們只需拷貝下面的內(nèi)容來創(chuàng)建bean就行。
{
"code": 200,
"msg": "成功",
"data": [{
"id": 1,
"version": "2",
"schoolList": [{
"id": 1,
"name": "嶺南一中",
"studentList": [{
"name": "zhangxiaofan",
"age": 15
}]
}],
"flag": true
}]
}
點擊確定后,會自動幫我們創(chuàng)建好對應的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文件,提取目標數(shù)據(jù)
假設我們想知道每個學校,有哪些學生(姓名)。
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);
// 數(shù)據(jù)
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);
}
}
}
}
}
執(zhí)行結果:
Connected to the target VM, address: '127.0.0.1:35240', transport: 'socket'
學校:嶺南一中,有學生:zhangxiaofan
學校:嶺南一中,有學生:wangwu
學校:實驗中學,有學生:lisi
學校:實驗中學,有學生:zhaoliu
總結
按照上面的方法,我們可以快速的提取復雜的Json文件,快速獲取我們想要的內(nèi)容!文章來源:http://www.zghlxwxcb.cn/news/detail-752354.html
如果文件特別大,可以考慮多線程的方式處理。文章來源地址http://www.zghlxwxcb.cn/news/detail-752354.html
到了這里,關于Java如何快速讀取&解析JSON數(shù)據(jù)(文件),獲取想要的內(nèi)容?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!