Ankur
Ankur

Reputation: 51118

How do I create a JSON Array?

Hi I want to create a JSON array.

I have tried using:

JSONArray jArray = new JSONArray();
  while(itr.hasNext()){
    int objId = itr.next();
jArray.put(objId, odao.getObjectName(objId));
  }
results = jArray.toString();

Note: odao.getObjectName(objId) retrieves a name based on the "object Id" which is called objId.

However I get a very funny looking array like

[null,null,null,"SomeValue",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"AnotherValue",null,null,null,null,null,null,null,null,null,null,"SomethingElse","AnotherOne","LastOne"]

With only "LastOne" being displayed when I retrieve it using jQuery.

The Array SHould look like

{["3":"SomeValue"],["40":"AnotherValue"],["23":"SomethingElse"],["9":"AnotherOne"],["1":"LastOne"]}

The numbers aren't showing up at all for some reason in the array that I am getting.

Upvotes: 5

Views: 88552

Answers (3)

Buhake Sindi
Buhake Sindi

Reputation: 89209

For your quick Solution:

JSONArray jArray = new JSONArray();
while (itr.hasNext()) {
   JSONObject json = new JSONObject();
   int objId = itr.next();
   json.put(Integer.toString(objId), odao.getObjectName(objId));
   jArray.put(json);
}

results = jArray.toString();

Based on T. J. Crowder's response, my solution does this:

[{"3":"SomeValue"},
 {"40":"AnotherValue"},
 {"23":"SomethingElse"},
 {"9":"AnotherOne"},
 {"1":"LastOne"}
]

Refer to Jim Blackler's comment of what you're doing wrong.

Upvotes: 12

T.J. Crowder
T.J. Crowder

Reputation: 1075635

What you've quoted for your "The object should look like" is invalid JSON. It's an object (delimited by { and }) but then it has values within it that don't have any keys. See json.org for the syntax of JSON.

If you want this:

{"3":"SomeValue",
 "40":"AnotherValue",
 "23":"SomethingElse",
 "9":"AnotherOne",
 "1":"LastOne"
}

...use JSONObject instead, and turn your objIds into keys when putting the entries in, e.g.:

JSONObject obj = new JSONObject();
while(itr.hasNext()){
    int objId = itr.next();
    obj.put(String.valueOf(objId), odao.getObjectName(objId));
}
results = obj.toString();

If you want this:

[{"3":"SomeValue"},
 {"40":"AnotherValue"},
 {"23":"SomethingElse"},
 {"9":"AnotherOne"},
 {"1":"LastOne"}
]

...see The Elite Gentleman's answer (that's a JSONArray of JSONObjects).

Upvotes: 2

Jim Blackler
Jim Blackler

Reputation: 23179

The clue is in the documentation for JSONArray for method put(int index, String value)

If the index is greater than the length of the JSONArray, then null elements will be added as necessary to pad it out.

Upvotes: 8

Related Questions