You need to enable JavaScript to run this app. Java中for循环调用JSONObject的put方法输出不符合预期如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Java中for循环调用JSONObject的put方法输出不符合预期如何解决

问题原因

你将infoObj的实例化代码写在了for循环外部,全程只会创建一个JSONObject对象。Java中对象为引用传递,每次循环执行infoObj.put()时都是修改同一个对象的属性值,往ResultArray中添加的也始终是同一个对象的引用。最终数组里所有元素都会被覆盖为最后一次匹配到的数据,和预期输出不符。

修复方案

将infoObj的实例化逻辑移动到if判断内部,每次匹配到符合条件的数据时都创建新的独立对象,避免属性互相覆盖,修复后代码如下:

try {
    JSONObject obj = new JSONObject(loadJsonfromAssets());
    JSONArray arr = obj.getJSONArray("Sheet1");

    JSONObject finalObj = new JSONObject();
    JSONArray ResultArray = new JSONArray();

    for (int i=0; i<arr.length();i++){
        JSONObject obj1 = arr.getJSONObject(i);
        if (obj1.getString("City").equals("New Delhi")){
            Log.d("postal", "Found!");
            Toast.makeText(this, "" + obj1.getString("Pincode"), Toast.LENGTH_SHORT).show();
            // 每次匹配到数据时新建独立的infoObj对象
            JSONObject infoObj = new JSONObject();
            infoObj.put("PostOfficeName", obj1.getString("PostOfficeName"));
            infoObj.put("Pincode",obj1.getString("Pincode"));
            ResultArray.put(infoObj);
        }
    }
    finalObj.put("Result", ResultArray);

    System.out.println(finalObj);

} catch (JSONException e) {
    e.printStackTrace();
}

修改后ResultArray中会存储所有匹配到的独立条目,输出结果和预期格式一致。

内容的提问来源于stack exchange,提问作者Abhay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 22:15:04