我有一个格式为 {"item":"CDigital_cam_80X","manufacturer":"Canon","model":"95 IS","announced-date":"2009- 的简单 JSON 字符串02-17T19:00:00.000-05:00"}
我已经创建了一个 Java Bean 并编写了代码来使用 Gson 反序列化字符串来获取对象,但由于某种原因,announced_date 字段每次都返回 null。
这是反序列化的代码片段
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create();
currentProduct = gson.fromJson(currentLine, Product.class);
这是产品类别。
import java.util.Date;
public class Product {
private String product_name;
private String manufacturer;
private String model;
private Date announced_date;
public String getProduct_name() {
return product_name;
}
public void setProduct_name(String product_name) {
this.product_name = product_name;
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public Date getAnnounced_date() {
return announced_date;
}
public void setAnnounced_date(Date announced_date) {
this.announced_date = announced_date;
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append("{ \n");
sb.append(" product_name: "); sb.append(this.getProduct_name()); sb.append("\n");
sb.append(" manufacturer "); sb.append(this.getManufacturer()); sb.append("\n");
sb.append(" family: "); sb.append(this.getFamily()); sb.append("\n");
sb.append(" model: "); sb.append(this.getModel()); sb.append("\n");
sb.append(" announced_date: "); sb.append(this.getAnnounced_date()); sb.append("\n");
sb.append("}");
return sb.toString();
}
}
这是我运行代码并打印出反序列化对象的属性时得到的结果
{
item:CDigital_cam_80X
manufacturer Canon
model:95 IS
announced-date:null
}
我做错了什么?
最佳答案
您有两个问题 --
在 JSON 中,该字段名为“announced-date”,但在 POJO 中,该字段名为“announced_date”。请注意,有一个下划线而不是破折号。 GSON 将它们视为两个不同的领域。要解决此问题,请使用 @SerializeName
注释。
@SerializedName("announced-date")
private Date announced_date;
其次,时区说明符的数据格式已关闭。 Z
应该是 X
。 Z
规范中没有冒号 (:)。 X
确实如此。请参阅SimpleDateFormat
.
关于java - 使用 Gson 从 JSON 字符串反序列化 iso-8601 格式的日期时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027507/