我正在使用GSON反序列化一些JSON。 JSON是:
{
"employee_id": 297,
"surname": "Maynard",
"givenname": "Ron",
"lastlogin": "",
...
Employee对象有一个Date字段lastlogin:
public class Employee {
private Integer employee_id;
private String surname;
private String givenname;
private Date lastlogin;
我遇到的问题是,当未填充lastlogin值时,它是JSON中的空字符串,因此GSON解析器抛出:
java.text.ParseException: Unparseable date: ""
at java.text.DateFormat.parse(DateFormat.java:337)
at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:79)
at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:66)
通常的方法是什么?
答案 0 :(得分:35)
如果你无法控制输入(即JSon生成部分),但知道非空时应该是格式,你应该编写一个可以处理空值的自己的反序列化器,例如
。 GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
@Override
public Date deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
throws JsonParseException {
try {
return df.parse(json.getAsString());
} catch (ParseException e) {
return null;
}
}
});
Gson gson = gsonBuilder.create();
请参阅https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserializ
答案 1 :(得分:2)