2013-03-30 18 views
1

我使用下面的代码从我的服务器处理REST响应:解析字符串JSONTokener到的JSONObject OR JSONArray

if (response.getEntity() != null) { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
     StringBuilder builder = new StringBuilder(); 
     for (String line = null; (line = reader.readLine()) != null;) { 
      builder.append(line).append("\n"); 
     }   
     JSONTokener tokener = new JSONTokener(builder.toString()); 
     try { 
      rr.jsonObject = new JSONObject(tokener);     
     } catch (JSONException e) {    
      e.printStackTrace(); 

      Log.d("parsing", "creating json array"); 
      try { 
       rr.jsonArray = new JSONArray(tokener); 
      } catch (JSONException e1) {      
       e1.printStackTrace(); 
      } 

     } 
    } 

如果响应是一个JSONObject的,它完美的作品,但如果服务器返回一个JSONArray ,第二个try块也会抛出,尽管它是正确的json。

03-30 14:09:15.069: W/System.err(6713): org.json.JSONException: End of input at character 314 of [{"__className":"stdClass","char3code":"DEU","fips_name":"Germany","alternate_names":"Germany, Deutschland, Allemagne, Alemania"},{"__className":"stdClass","char3code":"USA","fips_name":"United States","alternate_names":"United States of America, Vereinigte Staaten von Amerika, \u00c9tats-Unis, Estados Unidos"}] 

回答

1

我希望,这是失败的原因是,当你调用new JSONArray(tokener)tokener不再位于令牌流的开始。尝试创建一个新的JSONTokener实例解析第二次尝试..

+0

是的,就是这样。谢谢! –