我的问题很简单。请查看以下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 对象引用
如您所见:
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可能有问题吗?
答案 0 :(得分:1)
get
方法在链式调用中不安全。请参阅文档,@return
:
与名称匹配的成员。如果不存在这样的成员,则为null。
因此,您需要检查它是否不是null
:
JsonElement q3Element = qualiTimes.get("Q3");
String Q3 = null;
if (q3Element != null) {
Q3 = q3Element.getAsString();
}