2014-02-21 26 views
-1

我有一个json从服务器返回给我。我想迭代,但其gving我的错误在这条线的红色.getJSONObject(I)JSONObject给我错误

JSONObject obj = jsonHospitals.getJSONObject(i); 

误差强调,给我两个选择 1变化optJSONObject(...) 2 - 将'i'的类型更改为'字符串'

我能做些什么来使用JSONObject并遍历json。我是新来的机器人,所以请忍受我的家伙! 下面是一些代码

String responseData = new String(charArray); 

        JSONObject jsonHospitals = new JSONObject(responseData); 

        for(int i = 0; i< jsonHospitals.length(); i++){ 
         JSONObject obj = jsonHospitals.getJSONObject(i); 
         JSONObject hospital_obj = obj.getJSONObject("Hospital"); 
         String hospital_name = hospital_obj.getString("hospital_name"); 
         Log.v(TAG, hospital_name); 
        } 

感谢 UPDATE * OK受审新的东西,所有张贴现在这里 *

我想这个代码

try { 

       URL hospitalFeedUrl = new URL("siteresponseaddress"); 
       HttpURLConnection connection = (HttpURLConnection)hospitalFeedUrl.openConnection(); 
       connection.connect(); 
       responseCode = connection.getResponseCode(); 
       if(responseCode == HttpURLConnection.HTTP_OK){ 
        InputStream inputStream = connection.getInputStream(); 
        Reader reader = new InputStreamReader(inputStream); 
        int contentLenght = connection.getContentLength(); 
        char[] charArray = new char[contentLenght]; 
        reader.read(charArray); 
        String responseData = new String(charArray); 

        JSONArray jsonHospitals = new JSONArray(responseData); 

        for(int i = 0; i< jsonHospitals.length(); i++){ 
         JSONObject obj = jsonHospitals.getJSONObject(i); 
         JSONObject hospital_obj = obj.getJSONObject("Hospital"); 
         String hospital_name = hospital_obj.getString("hospital_name"); 
         Log.v(TAG, hospital_name); 
        } 
        Log.v(TAG, responseData); 
       } 
       else { 
        Log.i(TAG, "Unsccessful HHTP Response Code "+ responseCode); 
       } 
       Log.i(TAG, "Code " + responseCode); 
      } 
      catch (MalformedURLException e) { 
       Log.e(TAG, "exception caught: ", e);  
      } 
      catch (IOException e) { 
       Log.e(TAG, "exception IO caught: ", e); 
      } 
      catch(Exception e){ 
       Log.e(TAG, "General exception", e); 
      } 

NOW那给我在LOG LOG

02-21 03:13:08.350: D/dalvikvm(838): GC_FOR_ALLOC freed 43K, 5% free 2949K/3072K, paused 153ms, total 154ms 
02-21 03:13:08.350: I/dalvikvm-heap(838): Grow heap (frag case) to 3.558MB for 635812-byte allocation 
02-21 03:13:08.460: D/dalvikvm(838): GC_FOR_ALLOC freed 2K, 4% free 3567K/3696K, paused 101ms, total 101ms 
02-21 03:13:09.310: I/Choreographer(838): Skipped 66 frames! The application may be doing too much work on its main thread. 
02-21 03:13:09.460: D/gralloc_goldfish(838): Emulator without GPU emulation detected. 
02-21 03:13:15.110: D/dalvikvm(838): GC_FOR_ALLOC freed 188K, 7% free 3892K/4156K, paused 171ms, total 208ms 
02-21 03:13:15.350: D/dalvikvm(838): GC_FOR_ALLOC freed 375K, 13% free 3898K/4464K, paused 60ms, total 79ms 
02-21 03:13:15.350: E/MainListActivity(838): General exception 
02-21 03:13:15.350: E/MainListActivity(838): org.json.JSONException: Unterminated string at character 21961 of [{"Hospital":{"id":"61790","hospital_name":"Goodland Regional Medical Ctr","hospital_add_1":"220 W 2nd St","hospital_add_2":null,"hospital_city":"Goodland","hospital_state":"KS","hospital_zip":"67735","hospital_phone":"785-890-3625\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"61795","hospital_name":"Cheyenne County Hospital","hospital_add_1":"210 W 1st St","hospital_add_2":null,"hospital_city":"Saint Francis","hospital_state":"KS","hospital_zip":"67756","hospital_phone":"785-332-2104\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"61801","hospital_name":"Stanton County Hospital","hospital_add_1":"404 N Chestnut St","hospital_add_2":null,"hospital_city":"Johnson","hospital_state":"KS","hospital_zip":"67855","hospital_phone":"620-492-6250\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"61802","hospital_name":"Kearny County Hospital","hospital_add_1":"500 E Thorpe St","hospital_add_2":null,"hospital_city":"Lakin","hospital_state":"KS","hospital_zip":"67860","hospital_phone":"620-355-7111\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"61803","hospital_name":"Wichita County Health Center","hospital_add_1":"211 E Earl St","hospital_add_2":null,"hospital_city":"Leoti","hospital_state":"KS","hospital_zip":"67861","hospital_phone":"620-375-2233\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"61808","hospital_name":"Hamilton County Hospital","hospital_add_1":"700 N Huser St","hospital_add_2":null,"hospital_city":"Syracuse","hospital_state":"KS","hospital_zip":"67878","hospital_phone":"620-384-7461\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"61809","hospital_name":"Greeley County Health Services","hospital_add_1":"506 3rd St","hospital_add_2":null,"hospital_city":"Tribune","hospital_state":"KS","hospital_zip":"67879","hospital_phone":"620-376-4221\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"61810","hospital_name":"Bob Wilson Memorial Hospital","hospital_add_1":"415 N Main St","hospital_add_2":null,"hospital_city":"Ulysses","hospital_state":"KS","hospital_zip":"67880","hospital_phone":"620-356-1266\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"61812","hospital_name":"Morton County Hospital","hospital_add_1":"445 Hilltop St","hospital_add_2":null,"hospital_city":"Elkhart","hospital_state":"KS","hospital_zip":"67950","hospital_phone":"620-697-2141\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"61813","hospital_name":"Stevens County Hospital","hospital_add_1":"1006 S Jackson St","hospital_add_2":null,"hospital_city":"Hugoton","hospital_state":"KS","hospital_zip":"67951", 

//目录下载FINISHED

//这是不目录下载 JSON

[{"Hospital":{"id":"63083","hospital_name":"Colorado Mental Health Inst","hospital_add_1":"1600 W 24th St","hospital_add_2":null,"hospital_city":"Pueblo","hospital_state":"CO","hospital_zip":"81003","hospital_phone":"719-546-4000\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"63084","hospital_name":"Parkview Medical Center","hospital_add_1":"400 W 16th St","hospital_add_2":null,"hospital_city":"Pueblo","hospital_state":"CO","hospital_zip":"81003","hospital_phone":"719-584-4000\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]},{"Hospital":{"id":"63085","hospital_name":"St Mary-Corwin Medical Center","hospital_add_1":"1008 Minnequa Ave","hospital_add_2":null,"hospital_city":"Pueblo","hospital_state":"CO","hospital_zip":"81004","hospital_phone":"719-560-4000\r","hospital_fax":null,"hospital_description":null,"callcenter_agent_approval":"0","hospital_site":"","mdpocket_approval":"0","facebook":""},"Floor":[],"Department":[],"Image":[],"Notes":[]}] 
+0

请发布您试图解析的JSON样本。它不清楚,如果你实际上有一个JSON数组或对象。 –

+0

@BrianRoach我猜它链接到他以前的问题@ http://stackoverflow.com/questions/21846806/how-to-parse-this-response-using-jsonobject – Raghunandan

+0

而且,那里的答案告诉op *完全*如何解析它。 –

回答

0

的一部分没有getJSONObject这需要INT作为PARAM。

http://developer.android.com/reference/org/json/JSONObject.html

public JSONObject getJSONObject (String name) 

Added in API level 1 
Returns the value mapped by name if it exists and is a JSONObject. 

Throws 
JSONException if the mapping doesn't exist or is not a JSONObject. 

因此,错误。您需要发布您的JSON用于进一步的帮助

您的JSON似乎类似于我已经回答了@

how to parse this response using JSONObject

编辑一个在你前面的问题:

try 
    { 
    HttpClient httpclient = new DefaultHttpClient(); 
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); 
    HttpGet request = new HttpGet("your url "); 
    HttpResponse response = httpclient.execute(request); 
    HttpEntity resEntity = response.getEntity(); 
    String _response=EntityUtils.toString(resEntity); 
     JSONArray jr = new JSONArray(_response); 
     for(int i=0;i<jr.length();i++) 
     { 
     JSONObject jb = (JSONObject)jr.getJSONObject(i); 
     JSONObject jb1 =(JSONObject) jb.getJSONObject("Hospital"); 
     String name = jb1.getString("hospital_name"); 
     Log.i("name....",name); 
     } 
    }catch(Exception e) 
    { 
     e.printStackTrace(); 
+0

@BrianRoach也许。不在这里http://developer.android.com/reference/org/json/JSONObject.html#getJSONObject(java.lang.String)。 – Raghunandan

+0

在编辑之前,我实际上是在误读你的答案。 –

+0

请看我的updat。我已经添加了一个详细的信息,CatLog正在说什么等 – Autolycus

0

变化:

JSONObject obj = jsonHospitals.getJSONObject(i); 

发送至:

JSONObject obj = jsonHospitals.getJSONObject(String.valueof(i)); 

的原因是因为该功能getJSONObject需要一个字符串作为它的参数 - Link to API Documentation

0

您试图遍历一个JSONArray 改变这一行:

的JSONObject jsonHospitals =新的JSONObject (responseData);

JSONAray jsonHospitals =新JSONAray(responseData);

如果它仍然不起作用,你能否提供你的JSON resopnse。

+0

请参阅更新谢谢 – Autolycus

0

如果输入JSON的类型是JSON阵列,你应该把它看作(见doc):

JSONArray array = new JSONArray(responseData); 

然后你就可以遍历它,使用:

for(int i = 0; i< array.length(); i++) { 
    array.getJSONObject(i); 
} 
-1
Hi Autolycus, 
      I think you have to parse responseData as JSONArray like below 

      **JSONArray jsonHospitals = new JSONArray(responseData);** 

      for(int i = 0; i< jsonHospitals.length(); i++){ 
        JSONObject obj = jsonHospitals.getJSONObject(i); 
        JSONObject hospital_obj = obj.getJSONObject("Hospital"); 
        String hospital_name = hospital_obj.getString("hospital_name"); 
        Log.v(TAG, hospital_name); 
       } 

     Hope it will work for you :)