Как я создаю Массив JSON?

Привет я хочу создать массив JSON.

Я попытался использовать:

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

Примечание: odao.getObjectName(objId) получает имя на основе "идентификатора объекта", который называют objId.

Однако я получаю очень забавно выглядящий массив как

[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"]

Только с "LastOne" тем, чтобы быть отображенным, когда я получаю его использование jQuery.

Массив Должен быть похожим

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

Числа не обнаруживаются вообще по некоторым причинам в массиве, который я получаю.

5
задан Sandip Armal Patil 29 November 2012 в 08:04
поделиться

3 ответа

Для быстрого решения:

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

Основано на T. J. Crowder's response, мое решение выглядит так:

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

Обратитесь к комментарию Джима Блэклера о том, что вы делаете неправильно.

12
ответ дан 18 December 2019 в 07:08
поделиться

То, что вы процитировали для своего "Объект должен выглядеть как", является некорректным JSON. Это объект (разделенный { и }), но внутри него есть значения, у которых нет ключей. Смотрите json.org для синтаксиса JSON.

Если вам нужно это:

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

... используйте JSONObject вместо этого, и превратите ваши objIdв ключи при вставке записей, например:

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

Если вам нужно это:

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

... смотрите The Elite Gentleman's answer (это JSONArray из JSONObjects).

2
ответ дан 18 December 2019 в 07:08
поделиться

Подсказка находится в документации для JSONArray для метода put (int index, String value)

Если индекс больше, чем длины JSONArray, тогда будут добавлены нулевые элементы, чтобы заполнить его.

8
ответ дан 18 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: