Android Parse Google Places API JSON

时间:2014-02-19 01:54:31

标签: android json google-places-api

我正在尝试从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)仍然失败。

2 个答案:

答案 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
}