Android/Java 中的 JSON Array 迭代

2022-08-31 07:28:18

我正在构建一个需要下载并与在线数据库同步的Android应用程序,我正在将我的查询从应用程序发送到php页面,该页面以JSON格式从数据库中返回相关行。

有人可以告诉我迭代JSON数组的最佳方法吗?

我收到一个对象数组:

[{json object},{json object},{json object}]

我可以用来访问数组中的 JSONObjects 的最简单的代码段是什么?

编辑:现在我想起来了,我用来迭代循环的方法是:

for (String row: json){
     id = row.getInt("id");
     name = row.getString("name");
     password = row.getString("password");
}

所以我想我能够以某种方式将返回的Json转换为可迭代数组。任何想法,我如何才能做到这一点?

我为我的虚无缥缈而道歉,但我从网上找到的一个例子中得到了这个工作,从那以后一直找不到它。


答案 1

我认为这段代码简短明了:

int id;
String name;
JSONArray array = new JSONArray(string_of_json_array);
for (int i = 0; i < array.length(); i++) {
    JSONObject row = array.getJSONObject(i);
    id = row.getInt("id");
    name = row.getString("name");
}

这就是你想要的吗?


答案 2

我以两种不同的方式做到了这一点,

1.) 制作地图

        HashMap<String, String> applicationSettings = new HashMap<String,String>();
        for(int i=0; i<settings.length(); i++){
            String value = settings.getJSONObject(i).getString("value");
            String name = settings.getJSONObject(i).getString("name");
            applicationSettings.put(name, value);
        }

2.) 制作一个 JSON 名称数组

    JSONArray names = json.names();
    JSONArray values = json.toJSONArray(names);
    for(int i=0; i<values.length(); i++){
        if (names.getString(i).equals("description")){
            setDescription(values.getString(i));
        }
        else if (names.getString(i).equals("expiryDate")){
            String dateString = values.getString(i);
            setExpiryDate(stringToDateHelper(dateString)); 
        }
        else if (names.getString(i).equals("id")){
            setId(values.getLong(i));
        }
        else if (names.getString(i).equals("offerCode")){
            setOfferCode(values.getString(i));
        }
        else if (names.getString(i).equals("startDate")){
            String dateString = values.getString(i);
            setStartDate(stringToDateHelper(dateString));
        }
        else if (names.getString(i).equals("title")){
            setTitle(values.getString(i));
        }
    }