2014-02-19 70 views
0

我试图从Google Places返回的JSON中获取信息。Android Parse Google Places API 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); 
     } 
    } 

} 

我的问题是,我如何确保“名称”或“评论”可用于解析?那if (result.getJSONArray("reviews") != null)仍然失败,因为getJSONArray为空。

回答

2

您可以通过使用opt命令而不是get命令来完成此操作。的get JSON数组更改为以下:

(result.optJSONArray("reviews") != null) 

退房的JSONObject documentation的完整列表。您也可以使用JSONObject has(String name)命令在实际获取它之前检查它是否存在。

+0

真棒人谢谢! – MoMoney

+0

嘿男人,所以我仍然没有得到任何评论。当我检查返回的JSON时,我甚至看不到“评论”数组。但我检查了同一地点的谷歌地图,我可以看到有几条评论。任何想法,为什么它不包括? – MoMoney

+0

@MoMoney你可能应该创建一个新的问题,并发布你正在使用返回的json进行的api调用。你可以在这里链接到新的问题。 – Bobbake4

0

由于你的json最初的形式是JSONObject,你可以使用它的isNull(String name)帮助方法来检查映射是否存在并且不为空。

从文档:

ISNULL(字符串名称)如果这个对象有 名没有映射或返回true,如果它有一个映射,其值为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 
} 
+0

谢谢,isNull是完美的! – MoMoney