Сборка JSONArray

1

Ну, я думаю, что в этом случае часть кода лучше, чем тысячи объяснений:

Мой код:

ArrayList<String[]> req = new ArrayList<String[]>(DAO.getInstance().dropList(request.getParameter("rname")));
JSONObject j = new JSONObject();
JSONArray m = new JSONArray();
for(String[] s : req){
    try{
        j.put("id",s[0]);
        j.put("name",s[1]);
        m.put(j);
        System.out.println("id and name from DAO : " + s[0] + " " + s[1]);
        System.out.println("JSON object : " + j);
        System.out.println("JSON array : " + m);
    }catch (Exception e){}
}

Консоль :

id and name from DAO : 1 Bob Sinclar
JSON object : {"id":"1","name":"Bob Sinclar"}
JSON array : [{"id":"1","name":"Bob Sinclar"}]
id and name from DAO : 2 Kurt Cobain
JSON object : {"id":"2","name":"Kurt Cobain"}
JSON array : [{"id":"2","name":"Kurt Cobain"},{"id":"2","name":"Kurt Cobain"}]
id and name from DAO : 3 AAA AAcc
JSON object : {"id":"3","name":"AAA AAcc"}
JSON array : [{"id":"3","name":"AAA AAcc"},{"id":"3","name":"AAA AAcc"},{"id":"3","name":"AAA AAcc"}]
id and name from DAO : 4 Bruce Wayne
JSON object : {"id":"4","name":"Bruce Wayne"}
JSON array : [{"id":"4","name":"Bruce Wayne"},{"id":"4","name":"Bruce Wayne"},{"id":"4","name":"Bruce Wayne"},{"id":"4","name":"Bruce Wayne"}]
id and name from DAO : 5 Tyler Dordon
JSON object : {"id":"5","name":"Tyler Dordon"}
JSON array : [{"id":"5","name":"Tyler Dordon"},{"id":"5","name":"Tyler Dordon"},{"id":"5","name":"Tyler Dordon"},{"id":"5","name":"Tyler Dordon"},{"id":"5","name":"Tyler Dordon"}]

Как вы можете видеть вместо добавления нового элемента, он заменяет весь элемент на последнюю запись, например, я добавлял указатель на свой JSONObject, а не его содержимое...

Есть идеи, ребята?

  • 0
    Вы должны использовать объекты вместо String [] ...
Теги:

1 ответ

1
Лучший ответ

Инициализируйте свой JSONObject в цикле.

for(String[] s : req){
    try{
        JSONObject j = new JSONObject();
         ...

... в противном случае вы обновите ссылку на JSONObject и добавите ее снова в JSONArray, следовательно добавив несколько копий одного и того же JSONObject.

Прежде чем JSONObject и JSONArray будут сериализованы, они ведут себя как обычный Java- Object s, поскольку изменения в методах, вызываемых в одной и той же ссылке, применяются к одному и тому же экземпляру.

Следовательно, после сериализации вы получите несколько копий последнего обновленного JSONObject в своем JSONArray.

  • 0
    Да ! Хорошая работа, человек! Можете ли вы попытаться объяснить, почему это так? Потому что я не понимаю ...
  • 0
    @Kermit вижу мое добавление к ответу.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню