簡體   English   中英

迭代 json 數組數組

[英]Iterating over a json array of arrays

我有一個像這樣返回的 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;
    }

關於您的問題的信息很少(堆棧跟蹤??),但這似乎不正確

 item.getString("name");

嘗試

 item.getString("item");

您以錯誤的方式創建數組:

new JSONArray(getJSON(url, null));

我用這個

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;
        }
    }
}

創建對應的Class,使用Gson庫解析json字符串,創建對象。 如此整潔干凈,沒有混亂

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM