在Java中解析JSON數(shù)據(jù)代碼示例及說(shuō)明
例子解析以下JSON數(shù)據(jù)
{"code":0,
"msg":"成功",
"data":
[{
"host":"1068222.com",
"port":"",
"m_token":"490e20e70e7de5f21a24b14c12a393f6",
"category":"sd",
"sub_category":"M1049",
"flyback_date":"2025-02-17",
"versions":["0.4.2"],
"req_times":["2025-02-15 02:58:20"],
"create_time":"2025-02-18 06:58:20",
"update_time":"2025-02-18 06:58:20"}]
}以下以 Gson 庫(kù)為例,展示如何解析這段 JSON 數(shù)據(jù):
首先,需要在項(xiàng)目中引入 Gson 庫(kù)的依賴(lài)。如果使用 Maven 項(xiàng)目,可以在pom.xml文件中添加以下依賴(lài):
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>接下來(lái),定義對(duì)應(yīng)的 Java 類(lèi)來(lái)映射 JSON 數(shù)據(jù)結(jié)構(gòu):
import java.util.List;
public class ResponseData {
private int code;
private String msg;
private List<DataItem> data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<DataItem> getData() {
return data;
}
public void setData(List<DataItem> data) {
this.data = data;
}
public static class DataItem {
private String host;
private String port;
private String m_token;
private String category;
private String sub_category;
private String flyback_date;
private List<String> versions;
private List<String> req_times;
private String create_time;
private String update_time;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
public String getM_token() {
return m_token;
}
public void setM_token(String m_token) {
this.m_token = m_token;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getSub_category() {
return sub_category;
}
public void setSub_category(String sub_category) {
this.sub_category = sub_category;
}
public String getFlyback_date() {
return flyback_date;
}
public void setFlyback_date(String flyback_date) {
this.flyback_date = flyback_date;
}
public List<String> getVersions() {
return versions;
}
public void setVersions(List<String> versions) {
this.versions = versions;
}
public List<String> getReq_times() {
return req_times;
}
public void setReq_times(List<String> req_times) {
this.req_times = req_times;
}
public String getCreate_time() {
return create_time;
}
public void setCreate_time(String create_time) {
this.create_time = create_time;
}
public String getUpdate_time() {
return update_time;
}
public void setUpdate_time(String update_time) {
this.update_time = update_time;
}
}
}然后,使用 Gson 庫(kù)解析 JSON 數(shù)據(jù):
import com.google.gson.Gson;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
class ResponseData {
private int code;
private String msg;
private List<DataItem> data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<DataItem> getData() {
return data;
}
public void setData(List<DataItem> data) {
this.data = data;
}
static class DataItem {
private String host;
private String port;
private String m_token;
private String category;
private String sub_category;
private String flyback_date;
private List<String> versions;
private List<String> req_times;
private String create_time;
private String update_time;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
public String getM_token() {
return m_token;
}
public void setM_token(String m_token) {
this.m_token = m_token;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getSub_category() {
return sub_category;
}
public void setSub_category(String sub_category) {
this.sub_category = sub_category;
}
public String getFlyback_date() {
return flyback_date;
}
public void setFlyback_date(String flyback_date) {
this.flyback_date = flyback_date;
}
public List<String> getVersions() {
return versions;
}
public void setVersions(List<String> versions) {
this.versions = versions;
}
public List<String> getReq_times() {
return req_times;
}
public void setReq_times(List<String> req_times) {
this.req_times = req_times;
}
public String getCreate_time() {
return create_time;
}
public void setCreate_time(String create_time) {
this.create_time = create_time;
}
public String getUpdate_time() {
return update_time;
}
public void setUpdate_time(String update_time) {
this.update_time = update_time;
}
}
}
public class JsonParsingExample {
public static void main(String[] args) {
String json = "{\"code\":0,\"msg\":\"成功\",\"data\":[{\"host\":\"1068222.com\",\"port\":\"\",\"m_token\":\"490e20e70e7de5f21a24b14c12a393f6\",\"category\":\"sd\",\"sub_category\":\"M1049\",\"flyback_date\":\"2025-02-17\",\"versions\":[\"0.4.2\"],\"req_times\":[\"2025-02-15 02:58:20\"],\"create_time\":\"2025-02-18 06:58:20\",\"update_time\":\"2025-02-18 06:58:20\"}]}";
Gson gson = new Gson();
ResponseData response = gson.fromJson(json, ResponseData.class);
System.out.println("Code: " + response.getCode());
System.out.println("Message: " + response.getMsg());
for (ResponseData.DataItem item : response.getData()) {
System.out.println("Host: " + item.getHost());
System.out.println("Port: " + item.getPort());
System.out.println("m_token: " + item.getM_token());
System.out.println("Category: " + item.getCategory());
System.out.println("Sub Category: " + item.getSub_category());
System.out.println("Flyback Date: " + item.getFlyback_date());
System.out.println("Versions: " + item.getVersions());
System.out.println("Req Times: " + item.getReq_times());
System.out.println("Create Time: " + item.getCreate_time());
System.out.println("Update Time: " + item.getUpdate_time());
if (!item.getReq_times().isEmpty()) {
String firstReqTime = item.getReq_times().get(0);
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(firstReqTime);
long timestamp = date.getTime();
System.out.println("First Req Time Timestamp: " + timestamp);
} catch (ParseException e) {
System.err.println("Failed to parse date: " + firstReqTime);
e.printStackTrace();
}
}
}
}
}以上代碼首先定義了與 JSON 數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)的 Java 類(lèi),然后使用 Gson 庫(kù)將 JSON 字符串解析為 Java 對(duì)象,并打印出解析后的數(shù)據(jù)。如果使用 Jackson 庫(kù),解析過(guò)程會(huì)有所不同,但原理類(lèi)似。
將解析出的 req_times 列表中的第一個(gè)時(shí)間字符串轉(zhuǎn)換為時(shí)間戳。在 Java 中,可以使用 SimpleDateFormat 類(lèi)來(lái)解析日期時(shí)間字符串,并將其轉(zhuǎn)換為 Date 對(duì)象,然后通過(guò) Date 對(duì)象的 getTime() 方法獲取對(duì)應(yīng)的時(shí)間戳。
代碼說(shuō)明:
- 日期格式化:使用
SimpleDateFormat類(lèi),其構(gòu)造函數(shù)傳入"yyyy-MM-dd HH:mm:ss"作為日期時(shí)間的格式模板,該模板與 JSON 數(shù)據(jù)中的日期時(shí)間字符串格式相匹配。 - 解析日期字符串:調(diào)用
SimpleDateFormat對(duì)象的parse()方法將日期時(shí)間字符串解析為Date對(duì)象。 - 獲取時(shí)間戳:通過(guò)
Date對(duì)象的getTime()方法獲取對(duì)應(yīng)的時(shí)間戳(從 1970 年 1 月 1 日 00:00:00 UTC 到該日期的毫秒數(shù))。 - 異常處理:使用
try-catch塊捕獲ParseException異常,當(dāng)日期時(shí)間字符串格式不符合模板時(shí),會(huì)拋出該異常,捕獲后打印錯(cuò)誤信息并輸出堆棧跟蹤。
運(yùn)行上述代碼,在輸出 Req Times 信息后,會(huì)額外輸出第一個(gè)請(qǐng)求時(shí)間對(duì)應(yīng)的時(shí)間戳。
總結(jié)
到此這篇關(guān)于在Java中解析JSON數(shù)據(jù)代碼的文章就介紹到這了,更多相關(guān)Java解析JSON數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)為PDF批量添加圖片水印實(shí)用指南
在數(shù)字化辦公日益普及的今天,PDF文檔作為信息傳輸和共享的重要載體,其安全性和版權(quán)保護(hù)變得尤為關(guān)鍵,本文將介紹如何使用Spire.PDF?for?Java輕松地在Java應(yīng)用程序中為PDF文檔添加圖片水印,有需要的可以參考下2025-11-11
JVM調(diào)優(yōu)總結(jié) -Xms -Xmx -Xmn -Xss的使用
這篇文章主要介紹了JVM調(diào)優(yōu)總結(jié) -Xms -Xmx -Xmn -Xss的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-07-07
SpringBoot Starter自定義之創(chuàng)建可復(fù)用的自動(dòng)配置模塊方式
本文將詳細(xì)介紹如何設(shè)計(jì)和實(shí)現(xiàn)一個(gè)自定義的Spring Boot Starter,幫助讀者掌握這一強(qiáng)大技術(shù),提升代碼復(fù)用性和開(kāi)發(fā)效率,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
java 實(shí)現(xiàn)發(fā)短信功能---騰訊云短信
如今發(fā)短信功能已經(jīng)成為互聯(lián)網(wǎng)公司的標(biāo)配,接下來(lái)通過(guò)本文給大家介紹java 實(shí)現(xiàn)發(fā)短信功能---騰訊云短信 ,需要的朋友可以參考下2019-08-08
用Java實(shí)現(xiàn)一個(gè)靜態(tài)鏈表的方法步驟
這篇文章主要介紹了用Java實(shí)現(xiàn)一個(gè)靜態(tài)鏈表的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹
這篇文章主要介紹了 java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-11-11
SpringBoot實(shí)現(xiàn)解析.mdb文件的實(shí)戰(zhàn)指南
這篇文章主要為大家詳細(xì)介紹了如何在SpringBoot項(xiàng)目中解析舊版Microsoft Access的.mdb文件,文中提供完整的Maven依賴(lài)配置、核心工具類(lèi)封裝及使用示例,幫助開(kāi)發(fā)者快速完成遺留系統(tǒng)數(shù)據(jù)遷移,希望對(duì)大家有所幫助2026-02-02
sentinel?整合spring?cloud限流的過(guò)程解析
這篇文章主要介紹了sentinel?整合spring?cloud限流,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
java基于C/S模式實(shí)現(xiàn)聊天程序(客戶(hù)端)
這篇文章主要為大家詳細(xì)介紹了java基于C/S模式實(shí)現(xiàn)聊天程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01

