Mam dziwne zachowanie podczas analizowania json z gsonem. Używam tego kodu:Wyjątek JsonSyntaxException z powodu IllegalState of gson
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;
}
}
Kiedy metoda jest wywoływana w moim projekcie, zwykle działa bez rzucania wyjątku. Ale czasami wyjątek jest rzucany i po odczekaniu jakiegoś czasu, parsowanie działa dobrze.
Nie wiem, kiedy wyjątek jest rzucany, a kiedy nie.
W jaki sposób dziennik "Parsowanie zakończone powodzeniem przy drugiej próbie" może zostać zarejestrowany?
Wyjątkiem jest
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)
Wydaje się, że wyjątek jest zgłaszany na wywołanie fromJson tuż przed wydrukiem dziennika "Parsing successfull on second try". Czy możesz pokazać tutaj wadliwy JSON? –
Zaloguj się do JSON-a do logcat, zanim spróbujesz go przeanalizować i wyśledź dokładne dane, które próbujesz przeanalizować przed wyjątkiem - w ten sposób możesz debugować, czy dane są poprawne. Prawdopodobnie istnieje błąd w używanym backendie. –
czy zweryfikowałeś swój json? możesz spróbować użyć tego [link] (http://jsonformat.com/), aby zweryfikować swój json –