2011-11-29 76 views
1

已經收到了來自四方以下響應,當我試圖解析它,我得到的錯誤如下:轉換四方HTTP響應JSON的Java

響應:

{"meta":{"code":200},"response":{"venues":[{"id":"4b1c3ce9f964a520d60424e3","name":"Folsom Lake Bowl","contact":{},"location":{"address":"511 East Bidwell","lat":38.67291745,"lng":-121.165447,"distance":39,"postalCode":"95630","city":"Folsom","state":"CA"},"categories":[{"id":"4bf58dd8d48988d1e4931735","name":"Bowling Alley","pluralName":"Bowling Alleys","shortName":"Bowling Alley","icon":{"prefix":"https://foursquare.com/img/categories/arts_entertainment/bowling_","sizes":[32,44,64,88,256],"name":".png"},"primary":true}],"verified":false,"stats":{"checkinsCount":592,"usersCount":284,"tipCount":2},"hereNow":{"count":0}}]}} 

錯誤:

Exception in thread "main" org.codehaus.jettison.json.JSONException: JSONObject["groups"] not found. 
at org.codehaus.jettison.json.JSONObject.get(JSONObject.java:360) 
at org.codehaus.jettison.json.JSONObject.getJSONArray(JSONObject.java:436) 
at playaround.FoursquareAPI.get(FoursquareAPI.java:56) 
at playaround.FoursquareAPI.main(FoursquareAPI.java:31) 

代碼:

StringBuilder sb = new StringBuilder(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     for (String line; null != (line = reader.readLine());) { 
      sb.append(line); 
     } 
     String output = sb.toString(); 
     JSONObject json = new JSONObject(output); 
     JSONArray venues = json.getJSONObject("response").getJSONArray("groups").getJSONObject(0).getJSONArray("items"); 
     System.out.println(venues.length()); 

我想要的只是從Foursquare讀取Java中的JSONObject的響應。任何幫助?

+1

在那個JSON中,你看到一個名爲「groups」的數組?看起來一切都按預期工作;它告訴你它不存在。 –

回答

3

讀取堆棧跟蹤,JSON被解析得很好。

的問題是,你正在試圖讀取並不存在的屬性 - 「羣體」

+0

謝謝!我將「groups」更改爲「場所」和「項目」更改爲「id」:錯誤表示JSONObject [「id」]不是JSONArray。我如何解決這個問題來讀取「id」值? – tribal

+0

我想通了:JSONArray venues = json.getJSONObject(「response」)。getJSONArray(「venues」); System.out.println(venues.length()); JSONObject venueObject = venues.getJSONObject(0); System.out.println(venueObject.getString(「id」)); – tribal

1

從我的經驗,如果你的JSON對象 - 比如我有問題;解析返回LOCATION字段。我開始用下面的代碼:

JSONObject jsonObjLoc = new JSONObject(myLocation); 

如果你能得到的對象,然後只提及「有」的參數,如:

if(jsonObjLoc.has("myAddress")) { // name of field to look for 

      myTextAddress = jsonObjLoc.getString("address"); 
} 

我使用具有防止空或空字段不被退回。