例子解析以下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
信息后,会额外输出第一个请求时间对应的时间戳。