2011-11-29 61 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"); 
} 

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