从JSONArray提取40个唯一userName对象时重复问题的解决方法
JSONArray返回重复最后一个元素的问题解决
问题根源
你的代码中,JSONObject jsonObject是在循环外部创建的单一实例。每次循环只是修改这个对象的userName属性,然后将同一个对象的引用添加到JSONArray中。由于数组存储的是对象引用,所有元素最终指向的都是同一个对象,自然会显示最后一次修改的结果。
修正代码
把JSONObject的创建逻辑移到for循环内部,确保每次循环生成一个全新的对象:
private JSONArray getJsonUsername(JSONArray listUsersJson, String users) throws JSONException { JSONArray jsonArray = new JSONArray(); for (int index = 0; index < listUsersJson.length(); ++index) { // 每次循环新建一个JSONObject实例 JSONObject jsonObject = new JSONObject(); JSONObject userObj = listUsersJson.getJSONObject(index); String userName = userObj.getString("userName"); jsonObject.put("userName", userName); jsonArray.put(jsonObject); } return jsonArray; }
关键修改说明
- 将
JSONObject jsonObject = new JSONObject();移入循环体内部,每次迭代都会创建独立的对象实例 - 每个新对象都拥有单独的
userName值,添加到数组后不会被后续循环的修改所覆盖 - 同时修正了变量名冲突问题(原代码中循环内的
JSONObject users和方法参数String users重名)
调用代码(无需修改)
listUsersJson = getUserInfo(); String users = ""; JSONArray listofUserNames = getJsonUsername(listUsersJson, users); logger.info("************listofUserNames************ " + listofUserNames);
内容的提问来源于stack exchange,提问作者JayB
相关产品推荐
相关产品推荐

