Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSON add to JSONArray issue

Tags:

java

json

Hi All I am not the best at Json. I was trying to add some json object into a json array through a loop, but the problem is everytime it comes to the loop, it also over rides the previous data in the array by the new data. here is my code:

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);
   }
}

example given 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}]

I hope my example is clear enough.

Id be grateful if anyone can help me here.

like image 604
ComeRun Avatar asked Dec 20 '12 01:12

ComeRun


2 Answers

You need to create a new jsonObj reference with every iteration of the loop:

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);
 }

Otherwise you are updating the same instance over and over again, and adding a reference to the same object many times to the array. Since they are all the same reference, a change to one of them affects all of them in the array.

like image 136
mellamokb Avatar answered Nov 12 '22 02:11

mellamokb


Following will add json obj into json array

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);
}

Output:

jsonArray : [{"ID":0,"Name":"Random0"},{"ID":1,"Name":"Random1"},{"ID":2,"Name":"Random2"}]

.pom has following dependency

<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>
like image 22
Parameshwar Avatar answered Nov 12 '22 02:11

Parameshwar