You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:13:13