我有一个JSON日期,我试图反序列化:
{
"created_at":"2015-05-26 10:14:32"
}
但是,该空间似乎导致GSON出现问题,并引发以下错误:
com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:第1行第160行路径的未终止对象$ .created_at
com.google.gson.JsonSyntaxException:2015-05-26
引起:java.text.ParseException:无法解析的日期:“2015-05-26”(偏移10处)
这是我的GSON配置:
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
})
.create();
我的模特:
public class MyModel extends ReamlObject {
@SerializedName("created_at")
private Date createdAt = new Date(System.currentTimeMillis());
}
最后
gson.fromJson(json, MyModel.class);
是否有人有任何解决方案允许日期范围内的空间?我已经尝试过自定义日期反序列化器,但这也没有任何区别。
答案 0 :(得分:1)
从这里: malformedjsonexception 我相信你的JSON中有一个虚假的“空间”,GSON认为它是无效的:
GSON在非空白对象结束后有额外字符时抛出该特定错误,并且它非常狭窄地定义空白(如JSON规范所做的那样) - 只有\ t,\ n,\ r \ n和空格算作空白。特别要注意,尾随NUL(\ 0)字符不算作空格,会导致此错误。
此外,从Gson用户指南中,我们读到:
...处理库类(DateTime等)时经常会出现这种情况。 Gson允许您注册自己的自定义序列化程序和反序列化程序。这是通过定义两部分来完成的:...
意思是你必须this
答案 1 :(得分:1)
It may be your text input,
check this unit test is working just right:
public class ParesDateTest{
@Test
public void test(){
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return false;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
})
.create();
MyModel o = gson.fromJson("{\n" +
" \"created_at\":\"2015-03-26 10:14:32\"\n" +
"}",MyModel.class);
Assert.assertNotNull(o);
}
public class MyModel {
@SerializedName("created_at")
private Date createdAt = new Date(System.currentTimeMillis());
}
}
答案 2 :(得分:0)
尝试使用此格式。随着&#39; T&#39;替换空间。
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();