2015-10-02 182 views
-1

我有一个JSON数组的JSON数组回来这样遍历数组

[{"item":"value"},{"item":"value"},{"item":"value"},{"item":"value"}] 

我试图遍历数组和抢“项目”的代码,如下面这样,但是值从来没有抓住,我可以证实,该阵列确实有值,但不知何故,这总是返回null

ArrayList<ArrayList<Object>> mainList = new ArrayList<ArrayList<Object>>(); 

    String json = getJSON(url, null); 

    JSONObject jsonObject = null; 

    try { 
     jsonObject = new JSONObject(json); 

     int counter = 0; 

     JSONArray itemArray = new JSONArray(); 
     itemArray.put(jsonObject); 

     while(counter < itemArray.length()){ 

      //create an inner array 
      ArrayList<Object> innerList = new ArrayList<Object>(); 

      //grab the contents of the post 
      JSONObject item = itemArray.getJSONObject(counter); 

      //place items into inner array 
      innerList.add(counter + 1); 
      innerList.add(item.getString("item")); 


      //place inner array into main array 
      mainList.add(innerList); 

      counter++; 
     } 



     return mainList; 
    } catch (JSONException e) { 
     e.printStackTrace(); 

     return null; 
    } 

回答

0

创建以错误的方式排列:

new JSONArray(getJSON(url, null)); 
1

还有就是要对你的问题(堆栈跟踪?)一点信息,但这似乎并不正确

item.getString("name"); 

尝试

item.getString("item"); 
+0

哎呀对不起,这是一个错误,我改名为项目,使我的观点更加明确 –

+0

item.optString将保持应用程序崩溃,如果这是有史以来空。只需检查空字符串。 –

0

我用这个

JSONParser parser = new JSONParser(); 

boolean downloaded = parser.downloadJSON(url, JSONParser.HTTP_GET); 
if (!downloaded) throw new Exception("Oops"); 

JSONObject root = parser.getRoot(); 

JSONArray list = parser.getList(root, "list"); 
if (list != null) 
{ 
    for (int i = 0; i < list.length(); i++) 
    { 
     JSONObject jo = list.getJSONObject(i); 
     if (jo == null) continue; 

     // let's go... 
    } 
} 

这。 ...

public class JSONParser 
{ 

    public static int HTTP_GET = 0; 
    public static int HTTP_POST = 1; 

    private String json; 

    // constructor 
    public JSONParser() 
    { 
     json = null; 
    } 

    /** 
    * Scarica il documento JSON e lo rende disponibile ai vari metodi sempre 
    * disponibili in questa classe 
    * 
    * @param url indirizzo url da cui scaricare il documento JSON 
    * @param type tipo di richiesta GET o HTTP 
    * @return indica se è stato scaricato, altrimenti lancia eccezione 
    */ 
    public boolean downloadJSON(String url, int type) throws Exception 
    { 
     try 
     { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpUriRequest httpRequest = type == HTTP_POST ? new HttpPost(url) : new HttpGet(url); 
      HttpResponse httpResponse = httpClient.execute(httpRequest); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      json = EntityUtils.toString(httpEntity); 

      return true; 
     } 
     catch (UnsupportedEncodingException ex) 
     { 
      WLogger.error("XMLParser", "UnsupportedEncodingException downloadJSON", ex); 
      throw ex; 
     } 
     catch (ClientProtocolException ex) 
     { 
      WLogger.error("XMLParser", "ClientProtocolException downloadJSON", ex); 
      throw ex; 
     } 
     catch (IOException ex) 
     { 
      WLogger.error("XMLParser", "IOException downloadJSON", ex); 
      throw ex; 
     } 

     // WHttpRequestAsyncTask task = new WHttpRequestAsyncTask(); 
     // task.setType(type); 
     // task.execute(url); 
     // json = task.getResult(); 
     // return json != null; 
    } 

    public void setJsonData(String json) 
    { 
     this.json = json; 
    } 

    public JSONObject getRoot() 
    { 
     try 
     { 
      return new JSONObject(json); 
     } 
     catch (JSONException ex) 
     { 
      WLogger.error("JSONParser", "getRoot error", ex); 
      return null; 
     } 
    } 

    public JSONArray getList(JSONObject object, String name) 
    { 
     try 
     { 
      if (object == null || Utility.isNullOrEmpty(name) || object.isNull(name)) 
       return null; 
      return object.getJSONArray(name); 
     } 
     catch (Exception ex) 
     { 
      WLogger.error("JSONParser", "getList error", ex); 
      return null; 
     } 
    } 

    public JSONObject getObject(JSONObject object, String name) 
    { 
     try 
     { 
      if (object == null || object.isNull(name)) return null; 
      return object.getJSONObject(name); 
     } 
     catch (Exception ex) 
     { 
      WLogger.error("JSONParser", "getObject error", ex); 
      return null; 
     } 
    } 

    public String getString(JSONObject object, String name) 
    { 
     try 
     { 
      if (object == null || object.isNull(name)) return null; 
      return object.getString(name); 
     } 
     catch (Exception ex) 
     { 
      WLogger.error("JSONParser", "getObject error", ex); 
      return null; 
     } 
    } 

    public Integer getInt(JSONObject object, String name) 
    { 
     try 
     { 
      if (object == null || object.isNull("id")) return null; 
      return object.getInt("id"); 
     } 
     catch (Exception ex) 
     { 
      WLogger.error("JSONParser", "getObject error", ex); 
      return null; 
     } 
    } 

    public Double getDouble(JSONObject object, String name) 
    { 
     try 
     { 
      if (object == null || object.isNull(name)) return null; 
      return object.getDouble(name); 
     } 
     catch (Exception ex) 
     { 
      WLogger.error("JSONParser", "getObject error", ex); 
      return null; 
     } 
    } 

    public Long getLong(JSONObject object, String name) 
    { 
     try 
     { 
      if (object == null || object.isNull(name)) return null; 
      return object.getLong(name); 
     } 
     catch (Exception ex) 
     { 
      WLogger.error("JSONParser", "getObject error", ex); 
      return null; 
     } 
    } 

    public Boolean getBoolean(JSONObject object, String name) 
    { 
     try 
     { 
      if (object == null || object.isNull(name)) return null; 
      return object.getBoolean(name); 
     } 
     catch (Exception ex) 
     { 
      WLogger.error("JSONParser", "getObject error", ex); 
      return null; 
     } 
    } 
} 
+0

你是如何从'parser.getList(root,“list”)获得'list'的;'如果它不在json响应中。 – Tauqir

+0

看到我的答案,我希望这有助于 –

0

C reate对应的类并使用Gson库来解析json字符串并创建对象。如此整洁干净和无混乱

Gson gson = new Gson(); 
MyClass object = gson.fromJson(jsonString,MyClass.class);