大家好我不是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);
}
}
给出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}]
我希望我的榜样足够清楚。
如果有人能在这里帮助我,我将不胜感激。
答案 0 :(得分: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);
}
否则,您反复更新同一个实例,并多次向该数组添加对同一对象的引用。由于它们都是相同的引用,因此对其中一个的更改会影响数组中的所有引用。
答案 1 :(得分:0)
尽管每次循环运行时我都会创建一个新的JSONObject,但我仍然遇到相同的问题。所以我要做的是创建一个List
的JSONObjects,每次循环运行时,我都会向列表中添加一条新记录,并每次都更新该记录。在for循环的最后,我通过列表填充了JSONArray。
JSONArray jsonArray = new JSONArray();
List<JSONObject> myList = new ArrayList()<>;
if(X.size() > 0)
{
for (int j = 0; j < X.size(); j++)
{
myList.add(new JSONObject());
zBean aBean = (zBean)X.get(
myList.get(j).put(ID,newInteger(aBean.getId()));
myList.get(j).put(NAME,aBean.
}
for(int j = 0; j < myList.size(); j++)
jsonArray.add(myList.get(j));
}
答案 2 :(得分:0)
以下会将json obj添加到json数组中
public static void main(String[] args) {
JSONArray jsonArray = new JSONArray();
int i = 0;
while(i < 3)
{
JSONObject jsonObj = new JSONObject();
jsonObj.put("Name","Random"+i);
jsonObj.put("ID", i);
jsonArray.put(jsonObj); //jsonObj will be pushed into jsonArray
i++;
}
System.out.println("jsonArray : "+ jsonArray);
}
输出:
jsonArray : [{"ID":0,"Name":"Random0"},{"ID":1,"Name":"Random1"},{"ID":2,"Name":"Random2"}]
.pom 有以下依赖
<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>