使用gson解析json时,我有一种奇怪的行为。我使用这段代码:
private static Container parseContainer(String containerJson) {
try {
//TODO Remove try catch when Bug is done
return containerJson != null ? new Gson().fromJson(containerJson, Container.class)
: null;
} catch (JsonSyntaxException e) {
LOGGER.error("JsonSyntaxException ", e);
LOGGER.error("Json: " + containerJson);
//Sleep 3 minutes and try again.
try {
Thread.sleep(1000L * 60 * 3);
} catch (InterruptedException e1) {
LOGGER.error("Exception", e);
}
LOGGER.error("Try again to parse json: " + containerJson);
Container result = new Gson().fromJson(containerJson, Container.class);
LOGGER.error("Parsing successful on second try.");
return result;
}
}
在我的项目中调用该方法时,它通常可以在不抛出异常的情况下工作。但有时抛出异常并等待一段时间后,解析工作正常。
我还没知道什么时候抛出异常,什么时候没有。
如何在第二次尝试中解析成功"解析成功"永远都要记录?
例外是
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapt erFactory.java:176)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
答案 0 :(得分:0)
您的例外情况不满。 IllegalStateException必须在这里有一些注释。这样的事情。
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
如果您能以这种格式看到它会更有帮助 所以,无论如何你的Container.class()不是你的containerJson的正确类型的错误,尝试用这样的代码修复它
Type collectionType = new TypeToken<Collection<Container>>(){}.getType();
Collection<Container> enums = gson.fromJson(containerJson, collectionType);