在Java中解析JSON數(shù)據(jù)代碼示例及說明
例子解析以下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 庫為例,展示如何解析這段 JSON 數(shù)據(jù):
首先,需要在項目中引入 Gson 庫的依賴。如果使用 Maven 項目,可以在pom.xml
文件中添加以下依賴:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.9</version> </dependency>
接下來,定義對應(yīng)的 Java 類來映射 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 庫解析 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)對應(yīng)的 Java 類,然后使用 Gson 庫將 JSON 字符串解析為 Java 對象,并打印出解析后的數(shù)據(jù)。如果使用 Jackson 庫,解析過程會有所不同,但原理類似。
將解析出的 req_times
列表中的第一個時間字符串轉(zhuǎn)換為時間戳。在 Java 中,可以使用 SimpleDateFormat
類來解析日期時間字符串,并將其轉(zhuǎn)換為 Date
對象,然后通過 Date
對象的 getTime()
方法獲取對應(yīng)的時間戳。
代碼說明:
- 日期格式化:使用
SimpleDateFormat
類,其構(gòu)造函數(shù)傳入"yyyy-MM-dd HH:mm:ss"
作為日期時間的格式模板,該模板與 JSON 數(shù)據(jù)中的日期時間字符串格式相匹配。 - 解析日期字符串:調(diào)用
SimpleDateFormat
對象的parse()
方法將日期時間字符串解析為Date
對象。 - 獲取時間戳:通過
Date
對象的getTime()
方法獲取對應(yīng)的時間戳(從 1970 年 1 月 1 日 00:00:00 UTC 到該日期的毫秒數(shù))。 - 異常處理:使用
try-catch
塊捕獲ParseException
異常,當日期時間字符串格式不符合模板時,會拋出該異常,捕獲后打印錯誤信息并輸出堆棧跟蹤。
運行上述代碼,在輸出 Req Times
信息后,會額外輸出第一個請求時間對應(yīng)的時間戳。
總結(jié)
到此這篇關(guān)于在Java中解析JSON數(shù)據(jù)代碼的文章就介紹到這了,更多相關(guān)Java解析JSON數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

解決spring boot網(wǎng)關(guān)gateway導致的坑,無法下載文件問題