Android/Java中的JSON数组迭代

Kev*_*haw 147 java arrays android json

我正在构建一个需要下载并与在线数据库同步的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");
}
Run Code Online (Sandbox Code Playgroud)

所以我想我已经能以某种方式将返回的Json转换为可迭代的数组.任何想法我怎么能做到这一点?

我为我的迷途道歉,但我从网上找到的一个例子中得到了这个,但后来一直无法找到它.

vip*_*ipw 331

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

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");
}
Run Code Online (Sandbox Code Playgroud)

那是你在找什么?

  • 请注意,如果发送一个没有连续数字的"数组",则必须使用JSONObject (5认同)
  • 好又简单!效果很好! (3认同)

Nat*_*ann 67

我做了两种不同的方式,

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);
        }
Run Code Online (Sandbox Code Playgroud)

2.)制作名称的JSONArray

    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));
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

不幸的是,JSONArray 支持以下foreach语句:

for(JSONObject someObj : someJsonArray) {
    // do something about someObj
    ....
    ....
}
Run Code Online (Sandbox Code Playgroud)

  • JSONArray类未实现Iterable接口 (3认同)

Gra*_* S. 5

当我尝试@vipw 的建议时,我遇到了这个异常: The method getJSONObject(int) is undefined for the type JSONArray

这对我有用:

int myJsonArraySize = myJsonArray.size();

for (int i = 0; i < myJsonArraySize; i++) {
    JSONObject myJsonObject = (JSONObject) myJsonArray.get(i);

    // Do whatever you have to do to myJsonObject...
}
Run Code Online (Sandbox Code Playgroud)

  • 对于 android,我将 myJsonArray.size() 改为 myJsonArray.length() (2认同)