例子解析以下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 庫為例,展示如何解析這段 JSON 數據:
首先,需要在項目中引入 Gson 庫的依賴。如果使用 Maven 項目,可以在pom.xml
文件中添加以下依賴:
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.9</version>
</dependency>
?接下來,定義對應的 Java 類來映射 JSON 數據結構:
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 數據:
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 數據結構對應的 Java 類,然后使用 Gson 庫將 JSON 字符串解析為 Java 對象,并打印出解析后的數據。如果使用 Jackson 庫,解析過程會有所不同,但原理類似。
將解析出的?req_times
?列表中的第一個時間字符串轉換為時間戳。在 Java 中,可以使用?SimpleDateFormat
?類來解析日期時間字符串,并將其轉換為?Date
?對象,然后通過?Date
?對象的?getTime()
?方法獲取對應的時間戳。
代碼說明:
- 日期格式化:使用?
SimpleDateFormat
?類,其構造函數傳入?"yyyy-MM-dd HH:mm:ss"
?作為日期時間的格式模板,該模板與 JSON 數據中的日期時間字符串格式相匹配。 - 解析日期字符串:調用?
SimpleDateFormat
?對象的?parse()
?方法將日期時間字符串解析為?Date
?對象。 - 獲取時間戳:通過?
Date
?對象的?getTime()
?方法獲取對應的時間戳(從 1970 年 1 月 1 日 00:00:00 UTC 到該日期的毫秒數)。 - 異常處理:使用?
try-catch
?塊捕獲?ParseException
?異常,當日期時間字符串格式不符合模板時,會拋出該異常,捕獲后打印錯誤信息并輸出堆棧跟蹤。
運行上述代碼,在輸出?Req Times
?信息后,會額外輸出第一個請求時間對應的時間戳。