我在将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,但仍然不知道如何解决我的问题。 我错过了什么吗?
答案 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());
答案 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);
总是修改同一个对象,因为变量只是对象本身的引用。意味着myObject
和anExistedObject
指向同一对象。
您应该使用以下内容创建副本:
JSONObject copy = new JSONObject(original, JSONObject.getNames(original));
代替使用:
JSONObject myObject = new JSONObject;
myObject = anExistedObj;