на скриншотах.
Я перебираю внешний цикл от 0 до 20.
Во вложенном цикле я записываю в строку (customStr) номер внешней и внутренней итераций и добавляю в массив JSONArray.
Выходя из вложенного цикла добавляю объекты в nestedJSONObjects, где в качестве ключа указываю номер внешнего цикла, а в качестве значения массив,
в который я записывал значения внешних и внутренних итераций.
После выполнения всех циклов создаю новый JSON объект(externalJSONObject),
в котором хранятся все вложенные объекты (nestedJSONObjects).
Что не так:
Во-первых: в файле .json объекты идут не в порядке их добавления, это видно на втором скриншоте по ключам.
Во-вторых: все значения перезаписаны результатами последней итерации цикла.
Поигравшись с дебаггером понял, что проблема именно в строке 25 (nestedJSONObjects.put(keyStr, jsonArray);).
В строке 25 при добавлении новой пары ключ-значение, все значения, что были добавлены ранее, перезаписываются результат последней на текущий момент итерации.
Почему так может происходить?
Во-первых на строке 20 ты зачищаешь массив, а в строке 25 ты этот же массив запихиваешь во все ключи. Логично, что у тебя будет только последняя итерация, ведь во всех key-value парах у тебя в value один и тот же массив. Вместо этого создавай на строчке 20 новый массив. Во-вторых там используется HashMap, если я правильно помню, а он ключи раскидывает по хэшкоду. В-третьих зачем тебе json simple? Чем тебе Jackson или GSON не угодили?
А хотя не, тебе нужно в каждом цикле создавать Новый nestedjsonobect, так как ты меняешь всегда один и тот же объект, который ты обьявил в начале. От этого и идёт перезапись значений
Сто проц
+думаю дело в том, json Array объявлен в более широкой области видимости, из-за у нас по факту массив джисонв всего один, и он постоянно очищается
правильно думаете
А как область видимости переменной влияет на её содержимое?)
Самым очевидным образам, оператор new - ну да, по факту можно решить проблему поразному
И каким же очевидным?
в данном случае, ссылка не меняется и все данные просто теряются
Обсуждают сегодня