将JSONObjet放入JSONArray

时间:2018-11-30 12:19:34

标签: java arrays json

我在将JSONObject放入JSONArray时遇到问题。

这是我的代码:

String strObject = "{\"Code\":\"a\", \"Name\": \"b\"}";
JSONObject anExistedObject = new JSONObject(strObject);
JSONArray myArray = new JSONArray();

for(int count = 0; count < 2; count++){
    JSONObject myObject = new JSONObject;
    myObject = anExistedObject;

    myObject.put("Count", count);
    myArray.put(myObject);
}

System.out.println(myArray.toString());

结果:

[
    {
        "Code": "a",
        "Name": "b",
        "Count": 1
    },
    {
        "Code": "a",
        "Name": "b",
        "Count": 1
    }
]

我所期望的:

[
    {
        "Code": "a",
        "Name": "b",
        "Count": 0
    },
    {
        "Code": "a",
        "Name": "b",
        "Count": 1
    }
]

我已经读过this post,但仍然不知道如何解决我的问题。 我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

您每次都因以下行而修改同一对象:myObject = anExistedObj; 您需要复制该对象。

正确的代码:

JSONObject anExistedObj = new JSONObject();
myObject.put("Code", "a");
myObject.put("Name", "a");

JSONArray myArray = new JSONArray();
String[] keys = JSONObject.getNames(anExistedObj);

for(int count = 0; count < 2; count++){
    JSONObject myObject = new JSONObject(anExistedObj, keys);
    //anExistedObj = {"Code":"a", "Name": "b"}

    myObject.put("Count", count);
    myArray.put(myObject);
}

System.out.println(myArray.toString());

copy constructor JSONObject的结帐文档

答案 1 :(得分:1)

您每次都在更新和重用一个ExistedObject

String strObject = "{\"Code\":\"a\", \"Name\": \"b\"}";
JSONArray myArray = new JSONArray();

for(int count = 0; count < 2; count++){
    JSONObject myObject = new JSONObject(strObject);

    myObject.put("Count", count);
    myArray.put(myObject);
}

System.out.println(myArray.toString());

答案 2 :(得分:1)

之所以会这样,是因为行myObject.put("Count", count);总是修改同一个对象,因为变量只是对象本身的引用。意味着myObjectanExistedObject指向同一对象。

您应该使用以下内容创建副本:

JSONObject copy = new JSONObject(original, JSONObject.getNames(original));

代替使用:

JSONObject myObject = new JSONObject;
myObject = anExistedObj;