我有一些处理JSON字符串的代码;它有两个对象(一个叫Code
,另一个叫Result
)
Result
是一个数组 - 我知道这个数组中有62个元素,我可以通过将数组的长度打印到控制台来证明它。
以下是Result数组中两个元素的示例,为简单起见,此处单独显示:
示例1 - {"名称":" AName"" ID":1,"问题":"就绪&#34 ;,? " QuestionAnswered":" 1"}
示例2 - {"名称":" AName"," ID":1,"问题":"准备就绪?"}
问题是我需要获取QuestionAnswered的值(如果它们存在) - 但是当它们不存在时(如示例2中所示),我的for循环停止并且不会继续通过数组的其余部分...
JSONObject jsono = new JSONObject(responseString);
JSONArray jarray = jsono.getJSONArray("Result");
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
Details answer = new Details ();
answer.setAnswer(object.getString("QuestionAnswered"));
answer.setAnswerID(object.getInt("ID"));
createDB.addToWorksheetAnswers(answer);
}
}
我尝试添加if (object.getString("Answer") != null)
,但它没有任何区别。
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
if (object.getString("QuestionAnswered") != null) {
Details answer = new Details ();
answer.setAnswer(object.getString("QuestionAnswered"));
answer.setAnswerID(object.getInt("ID"));
createDB.addToWorksheetAnswers(answer);
}
}
}
为什么for循环停止?我可以这样做吗?
提前致谢
答案 0 :(得分:1)
我从未亲自使用过这个库,但根据文档看来,如果提供的密钥没有映射,则会抛出NullPointerException
(因为该方法是getJsonString(name).getString()
的快捷方式),请查看以下链接:http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html#getJsonString-java.lang.String-。
看起来您应该能够使用getJsonString(name)
方法来使用空检查,如果检查通过,则获取结果的toString()
值。
如果您使用Android的JSON库,那么如果映射不存在,它似乎也会抛出异常:
https://developer.android.com/reference/org/json/JSONObject.html#getString(java.lang.String)。在这种情况下,您可以使用has(name)
来确定在尝试检索映射之前是否存在映射。
https://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)
希望这有帮助。