10

大家好,我在 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}]

我希望我的例子足够清楚。

如果有人可以在这里帮助我,我将不胜感激。

4

3 回答 3

26

您需要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);
 }

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

于 2012-12-20T01:05:24.170 回答
1

以下将 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>
于 2021-01-11T13:48:34.370 回答
0

尽管每次循环运行时我都创建了一个新的 JSONObject,但我仍然遇到了同样的问题。所以我所做的是我创建了一个ListJSONObjects,每次循环运行时,我都会在我的列表中添加一条新记录并每次更新该记录。在 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));
}
于 2019-07-03T22:41:30.073 回答