JSONArray奇怪的结果

时间:2017-10-24 16:03:00

标签: java arrays json

我试图使用JSONArrays和JSONObjects从java中的不同类获取一些信息,但由于某种原因,我得到了非常奇怪的结果。

我的Info.java课程:

public JSONArray getSpawnedPets() {
    JSONArray petsArray = new JSONArray();
    JSONObject petO = new JSONObject();
    boolean spawned = false;
    for (int i = 0; i <= 3; i++) {
        spawned = true;
        if (spawned) {
            petO.put("petID", i);
            petO.put("petOwner", "owner"+i);
            petO.put("petName", "name");
            petO.put("color", "s");
            petO.put("particle", "s");
            petsArray.add(petO);
        }
    }
    return petsArray;
}

在我的Main.java类中,我有:

public class main {
    public static void main(String[] args) {
        JSONArray petsArray = new JSONArray();
        Info in = new Info();
        petsArray = In.getSpawnedPets();
        if (petsArray != null) {
            for (int i = 0; i < petsArray.size(); i++) {
                JSONObject po = (JSONObject) petsArray.get(i);
                System.out.println("PetInfo:");
                System.out.println(po.get("petID")+":");
                System.out.println(""+po.get("petName"));
                System.out.println(""+po.get("petOwner"));
            }
        }
    }
}

结果应该会增加,但我得到了这个:

PetInfo:
3:
name
owner3
PetInfo:
3:
name
owner3
PetInfo:
3:
name
owner3
PetInfo:
3:
name
owner3

我做错了什么吗?我找不到我的问题,相同的代码,但不使用类工作,但我必须使用它。

干杯。

1 个答案:

答案 0 :(得分:3)

在每次迭代中创建jsonobject,否则只有一个JSONObject JSONObject petO = new JSONObject();在循环的每次迭代中都会被更新

 JSONArray petsArray = new JSONArray();
 JSONObject petO;
    //boolean spawned = false; // no need of it
    for (int i = 0; i <= 3; i++) {
        //spawned = true;
        //if (spawned) { // no need of it , has no effect, always true
            petO = new JSONObject();
            // ^^^^^^^^^^^^^^^^^
            petO.put("petID", i);
            petO.put("petOwner", "owner"+i);
            petO.put("petName", "name");
            petO.put("color", "s");
            petO.put("particle", "s");
            petsArray.add(petO);
        //}
    }

注意:由于spawned是一个局部变量,并且在第一次迭代中将设置为true并且对代码没有影响所以不需要if