2014-06-24 39 views
0

我正在嘗試使用Google Places API,我基本上試圖解析JSON而沒有在JSON中的特定位置的密鑰。無鑰匙解析JSON數組的問題

我能夠解析所有數據並根據需要獲取值。 雖然,我遇到了該json中某個部件的問題。

這裏的JSON示例:

{ 
    "html_attributions":[], 
    "results":[ 
     { 
     "geometry":{ 
      "location":{ 
       "lat":somelat, 
       "lng":somelng 
      } 
     }, 
     "icon":"someicon", 
     "id":"someid", 
     "name":"somename", 
     "reference":"some_image_reference", 
     "types":[ 
      "gas_station", 
      "establishment" 
     ], 
     "vicinity":"Some Address" 
     } 
    ], 
    "status":"OK" 
} 

現在,這裏的代碼片段獲得從那裏我有麻煩的值:

JSONObject mainJSONObject = new JSONObject(mAppUtils.loadJSON(gasURL)); 
      JSONArray mainJSONArray = mainJSONObject.getJSONArray("results"); 

      for(int i = 0 ; i<mainJSONArray.length();i++){ 

       JSONObject obj = mainJSONArray.getJSONObject(i); 
          if(obj!=null){ 

          String value = obj.getString("types"); 

          Log.d("ARRAY VALUE : ", value); 
          } 


      } 

這裏,代碼工作完美,我能夠獲取數據。

主要問題是結果格式。這裏有一個例子:

06-23 22:03:51.762: D/ARRAY VALUE :(8074): ["car_repair","gas_station","establishment"] 
06-23 22:03:51.782: D/ARRAY VALUE :(8074): ["convenience_store","food","store","car_repair","gas_station","establishment"] 
06-23 22:03:51.782: D/ARRAY VALUE :(8074): ["gas_station","establishment"] 

正如你所看到的,結果我以這種形式獲得:[「car_repair」,「gas_station」,「建立」]

有沒有更好的辦法解析上述JSON或是否有任何方式我可以取代從 字符和括號[「car_repair」,「gas_station」,「建立」]

到就像:

car_repair,gas_station,建立,這樣我就可以在任何其他視圖的textview中使用它,而不顯示這些大括號和其他字符。

編輯:

JSONObject mainJSONObject = new JSONObject(mAppUtils.loadJSON(gasURL)); 
      JSONArray mainJSONArray = mainJSONObject.getJSONArray("results"); 

        for(int j=0;j<mainJSONArray.length();j++) 
        { 

        JSONObject jsonObject = mainJSONArray.getJSONObject(j); 

        JSONArray jsonArray = jsonObject.getJSONArray("types"); 

        for(int ju=0;ju<jsonArray.length();ju++) 
        { 
          value = jsonArray.getString(ju); 
         Log.d("PLACE TYPES ARRAY VALUE : ", value); 
        } 

在此之後,這裏是我得到的結果是:

06-23 22:53:44.928: D/PLACE TYPES ARRAY VALUE :(16322): car_repair 
06-23 22:53:44.928: D/PLACE TYPES ARRAY VALUE :(16322): gas_station 
06-23 22:53:44.928: D/PLACE TYPES ARRAY VALUE :(16322): establishment 
06-23 22:53:44.928: D/PLACE TYPES ARRAY VALUE :(16322): convenience_store 
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): food 
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): store 
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): car_repair 
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): gas_station 
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): establishment 
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): gas_station 
06-23 22:53:44.938: D/PLACE TYPES ARRAY VALUE :(16322): establishment 

但問題是,如何從他們的尊敬JSON數組分隔值。

任何幫助將非常感激..謝謝..:)

+0

' 「類型」:['是一個JSONArray – Raghunandan

+0

我明白但我也試圖使用JSONArray,並且我確實得到了結果,但對於某些reaso n,那麼我做 JSONArray typesJsonArray = obj.getJSONArray(「types」); String value = typesJsonArray.getString(i); 它給了我錯誤。 – mike20132013

+0

和錯誤是? – Raghunandan

回答

1

您可以通過數組循環並獲得基於索引值

for(int i=0;i<jsonarray.length().i++) 
{ 
     String value = (String) jsonarray.get(i); // Note the cast 
} 

您還可以使用getString(i)getInt(i)

取而代之的是

String value = obj.getString("types"); 

JSONArray jsonarray = obj.getJSONArray("types"); 

for(int j=0;j<jsonarray.length();j++) 
{ 
     String value = jsonarray.getString(j); 
} 

編輯2:

ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>(); 

然後在循環

HashMap<String,String> map = new HashMap<String,String>(): 
map.put("key",value); 
list.add(map) 

以獲得

HashMap<String,String> map = (HashMap<String,String>) list.get(0);// 0 is the index of item 
String value =(String)map.get("key"); 
+0

無法使用JSONArray jsonarray = obj.getJSONArray(「類型」),因爲「類型」是結果數組的一部分。事情是,我能夠用我的代碼獲取值,但又一次,它的全部包裹在大括號中。 – mike20132013

+0

@ mike20132013類型是一個jsonarray,通過它循環,並獲取值看到編輯的部分,它應該工作正常。記錄字符串的值並檢查。無結果數組 – Raghunandan

+0

@ mike20132013你有一個json對象節點'結果數組後,哪裏關閉/結束?在這裏結束''附近「:」某地址「 }' – Raghunandan