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

时间:2019-03-25 19:31:49

标签: android gson

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

下面是解析QualifyingResults以获得以下字段的代码:位置,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()'为null   对象引用

如您所见:

obl

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可能有问题吗?

1 个答案:

答案 0 :(得分:1)

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

  

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

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

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