我正在尝试从Google Places返回的JSON中获取信息。
jsonObj = new JSONObject(data);
JSONArray results = jsonObj.getJSONArray("results");
for (int i = 0; i < results.length(); i++) {
JSONObject result = results.getJSONObject(i);
System.out.println(result.getString("name"));
if (result.getJSONArray("reviews") != null){
JSONArray reviewsArray = result.getJSONArray("reviews");
JSONObject reviews = reviewsArray.getJSONObject(0);
if (reviews != null){
String review = reviews.getString("text");
Log.d("tag", "review: " + review);
}
}
}
我的问题是,如何确保“名称”或“评论”可用于解析?由于getJSONArray为空,if (result.getJSONArray("reviews") != null)
仍然失败。
答案 0 :(得分:2)
您可以使用opt命令而不是get命令来执行此操作。将get json数组更改为以下内容:
(result.optJSONArray("reviews") != null)
查看JSONObject documentation以获取完整列表。您还可以使用JSONObject has(String name)命令在实际获取之前检查它是否存在。
答案 1 :(得分:0)
由于您的json最初是JSONObject的形式,您可以使用它的isNull(String name)
辅助方法来检查映射是否存在且不为空。
来自文档:
isNull(String name)如果此对象没有映射,则返回true name或者它是否有一个值为NULL的映射。
例如:
try {
jsonObj = new JSONObject(data);
if(!jsonObj.isNull("results")){
JSONArray results = jsonObj.getJSONArray("results");
for (int i = 0; i < results.length(); i++) {
JSONObject result = results.getJSONObject(i);
if(!result.isNull("name"){
System.out.println(result.getString("name"));
}
if (result.getJSONArray("reviews") != null){
JSONArray reviewsArray = result.getJSONArray("reviews");
JSONObject reviews = reviewsArray.getJSONObject(0);
if (reviews != null){
String review = reviews.getString("text");
Log.d("tag", "review: " + review);
}
}
}
}
} catch(JSONException e){
//Something went wrong
}