JSON解析中的Android GSON可能存在错误?

拉斐尔·罗西(Raffaele Rossi)

我的问题很简单。请查看以下JSON来源:JSON API LINK

以下是解析的代码以QualifyingResults获取这些字段:position,Q1,Q2和Q3。

private static void parseJsonData(String json) {
        JsonElement root = new JsonParser().parse(json);
        JsonObject rootObj = root.getAsJsonObject();

        JsonArray schedulesPath = rootObj.getAsJsonObject("MRData")
                .getAsJsonObject("RaceTable")
                .getAsJsonArray("Races");

        if (schedulesPath.size() > 0) {
            int pos = 1;

            JsonArray qualifyingsList = schedulesPath.get(0)
                    .getAsJsonObject()
                    .getAsJsonArray("QualifyingResults");

            for (JsonElement element : qualifyingsList) {
                JsonObject qualiTimes = element.getAsJsonObject();

                String driverName = qualiTimes.getAsJsonObject("Driver").get("familyName").getAsString();
                String Q1 = qualiTimes.get("Q1").getAsString();
                String Q2 = qualiTimes.get("Q2").getAsString();
                String Q3 = qualiTimes.get("Q3").getAsString();

                Log.d("quali_results", Q1 + " " + Q2 + " " + Q3);
            }
        }

    }

为什么我收到此错误?

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String com.google.gson.JsonElement.getAsString()'

如您所见:

l

position,Q1,Q2和Q3是对象项目0的属性。为什么这会引发NullPointerException

String Q1 = qualiTimes.get("Q1").getAsString();
String Q2 = qualiTimes.get("Q2").getAsString();
String Q3 = qualiTimes.get("Q3").getAsString();

但这不是吗?

String Q1 = qualiTimes.get("position").getAsString();
String Q2 = qualiTimes.get("position").getAsString();
String Q3 = qualiTimes.get("position").getAsString();

GSON可能有问题吗?

米恰尔·乔伯

get方法在链式调用中不安全。参见文档@return

与名称匹配的成员。如果不存在这样的成员,则为Null。

因此,您需要检查它是否不是null

JsonElement q3Element = qualiTimes.get("Q3");
String Q3 = null;
if (q3Element != null) {
    Q3 = q3Element.getAsString();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章