JsonSyntaxException因为gson的IllegalState

时间:2014-12-10 07:34:36

标签: gson

使用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)

1 个答案:

答案 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);