JSON添加到JSONArray问题

Com*_*Run 8 java json

大家好我不是Json最好的.我试图通过循环将一些json对象添加到json数组中,但问题是每次进入循环时,它还会通过新数据覆盖数组中的先前数据.这是我的代码:

JSONObject jsonObj = new JSONObject();
JSONArray jsonArray = new JSONArray();
if(X.size() > 0)
{
  for (int j = 0; j < X.size(); j++)
   {
    zBean aBean = (zBean)X.get(j);
    jsonObj.put(ID,newInteger(aBean.getId()));
    jsonObj.put(NAME,aBean.getName());
    jsonArray.add(jsonObj);
   }
}
Run Code Online (Sandbox Code Playgroud)

给出X.size = 2的示例:

when j=0
jsonObj => {"Name":"name1","Id":1000}
jsonArray => [{"Name":"name1","Id":1000}]

when j = 1
jsonObj => {"Name":"name2","Id":1001}
jsonArray => [{"Name":"name2","Id":1001},{"Name":"name2","Id":1001}]
Run Code Online (Sandbox Code Playgroud)

我希望我的榜样足够清楚.

如果有人能在这里帮助我,我将不胜感激.

mel*_*okb 21

您需要jsonObj在循环的每次迭代中创建一个新引用:

for (int j = 0; j < X.size(); j++)
 {
  zBean aBean = (zBean)X.get(j);
  jsonObj = new JSONObject();
//^^^^^^^^^^^^^^^^^^^^^^^^^^^ add this line
  jsonObj.put(ID,newInteger(aBean.getId()));
  jsonObj.put(NAME,aBean.getName());
  jsonArray.add(jsonObj);
 }
Run Code Online (Sandbox Code Playgroud)

否则,您将反复更新同一实例,并多次向该数组添加对同一对象的引用.由于它们都是相同的引用,因此对其中一个的更改会影响数组中的所有引用.