Модератор
|
||||||||||||||||
1 | ||||||||||||||||
Парсинг json, проблема с хранением11.06.2019, 18:11. Показов 2556. Ответов 13
Здравствуйте, я новичок в java и прошу не кидаться тапками.
Пишу программу которая активно использует json (больше готовые, надо много парсить). Остановил выбор на гугловской бибилиотеке. С самой библиотекой проблем нету. Но возникла ошибка при чтении. Как обнаружил потом что проблема с записью в переменную, так как если вывод сделать на экран то проблем нету. Структура json файла такая: {{a:a}, [{b:b}, {c:c}, ..., {z:z}]}, немного утрировал , но общий вид такой. Сколько элементов в массиве неизвестно и каждый раз разное. В идеале мне надо чтобы работало так, передал имя файла получил на выходе структуру со всеми данными. Вот мои наработки, главный класс (код на другом компе, к нему пока нету доступа, пока в общих чертах):
Только как решить эту проблему не нашел. Если создать конструктор класса и ему передавать размер массива, то результат тот же. Я думал не будет проблем с динамическим массивом классов внутри другого класса. Либо подскажите как можно иначе сохранить эти данные для последующей обработки.
0
|
11.06.2019, 18:11 | |
Ответы с готовыми решениями:
13
Парсинг JSON в JSON Linked Data с использованием Hydra Java Проблема с хранением иконок в ресурсах Парсинг JSON с short.pub посредством NewtonSoft.Json [Newtonsoft.Json] Парсинг JSON-ответа |
Автоматизируй это!
|
|
11.06.2019, 19:00 | 2 |
а как вас тапками то не кидать? вы все "я начинающий, помогите мне многопоточный чат/соцсеть/ИИ написать, ни хрена не понимаю".
Даже вот как ты свой псевдокод написал уже о многом говорит -конвенция (не женевская!), слышал? как именно ругается, матом? пиши давай стек ошибки доки Gson уже зачитаны до дыр? что в файле лежит?жсоны?
0
|
Модератор
|
|
11.06.2019, 19:17 [ТС] | 3 |
пишет нечто такое
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException Это у меня вторая функция использующая gson. Первая работает без ошибок, в ней нету динамического массива классов. А вот тут проблема вышла. Тут скорее даже проблема не в библиотеке, а в том как правильно десереализованные данные сохранить. Я в начале сообщения привел структуру json файла, считывает без проблем если вывод сделать на экран а не в память. Опишу еще проблему как ее понял я. Есть класс в который считываю данные из json, одна из переменных этого класса является динамическим массивом другого класса. При парсинге заполняется этот динамический массив. При этом заполнении ругается. Не получается создать массив переменного размера внутри класса из вне. Использование конструктора не помогает, так же ругается. Файл и есть сам json, который надо считать. Он известной структуры, за исключением размера массива.
0
|
Автоматизируй это!
|
|
11.06.2019, 19:22 | 4 |
прочти внимательно
нужен твой код конечно и вот золотая тема
0
|
Модератор
|
|
11.06.2019, 20:15 [ТС] | 5 |
Сейчас написал простейшую программу которая повторяет ошибку из большой программы.
вот скрины первый вариант для меня предпочтительнее, так как при использовании конструктора мне не известен размер массива, размер массива узнается из метода внутри класса (которого здесь нету и который использует gson для заполнения своих переменных). На скринах класс data класс который хранит данные из jsona, внутри него есть класс который используя gson заполняет переменные. В этом примере вырезал парсинг джейсона а код заполнения вынес отдельно.
0
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
11.06.2019, 20:37 | 6 |
дебаггер изучи, конвенцию изучи.
ошибка из-за того, что в твоем массиве ничего нет (null) и ты это null дереференсишь
0
|
Автоматизируй это!
|
|
11.06.2019, 21:58 | 8 |
я попробую еще раз!
1) ты не знаешь конвенции и рановато тебе жсоны парсить, раз не понимаешь простых вещей, например классы нужно с большой буквы называть 2) читаем что такое массив, что такое объект, что такое нуллпоинтер эксепшн 3) читаем что тебе пишут на форуме, что тебе пишет ИДЕ и много думаем ИДЕ тебе прямо пишет, что в массиве по индексу i ничего нет , ибо объект не инициализирован d.ma[i].in=i // в d.ma[i] нет объекта, там нулл, потому при обращении к переменной in падает исключение
1
|
Модератор
|
|
11.06.2019, 22:20 [ТС] | 9 |
конвекция конвекция и ни слова о том что такое и хде искать. если нету на русском то идите лесом, англ не понимаю без гугло переводчика.
как хочу так и называю что хочу, на функционал это не влияет 2. читал об этом, не вижу противоречий с моим кодом
0
|
Автоматизируй это!
|
|
11.06.2019, 22:35 | 10 |
в любой книге по джава, даже в примерах кода, обрати внимания на именования переменных, классов и т.п.
тогда с программированием нужно сразу заканчивать ты прочитал что пишет тебе ИДЕ? понял и прочитал что такое нулл поинтер? понял и прочитал как инициализируются массивы объектов? так что зря начал фыркать, в школе ведь тоже с 1 класса идут постепенно, а не сразу в 5 идут, потому что нужно освоить и понять то, что преподают в начальных, прежде чем идти в 5 класс. Я тебе даже конкретно указал какая ошибка и где. Я могу тебе посоветовать прочесть главу о массивах в любой книге по джава, но вообще лучше всю книгу и с самого начала.
0
|
12.06.2019, 11:16 | 11 |
alecss131, когда ты инициализируешь массив ma = new mas2[size], ты заполнеяешь его значениями null, т.е. нельзя обратиться к полю какого-либо элемента, ибо все элементы равны null. Надо инициализировать не только массив, но и его элементы
Добавлено через 1 минуту Ну и да, раз ты самостоятельно не в состоянии этого понять, особенно после того, как господа выше тебе это напрямую сказали, то тебе действительно стоит почитать какую-нибудь книжку по java, а также начать учить англецкий, ибо без этого никак
0
|
Модератор
|
||||||
12.06.2019, 13:13 [ТС] | 13 | |||||
Проблему решил изменив код на следующий, с массивами типов string, int такого не было
0
|
12.06.2019, 14:56 | 14 |
alecss131, массив объектов типа String тоже инициализируется нулями (null), но разница в том, что ты обращаешься именно к определённому объекту, если делаешь присваивание strings[i] = "asdas". Но когда ты обращаешься к массиву, который находится внутри неинициализированного объекта, будет вылетать NullPointerException. А int — эт примитив, поэтому массив типа int инициализируется не значениями null, а просто нулями (0)
0
|
12.06.2019, 14:56 | |
12.06.2019, 14:56 | |
Помогаю со студенческими работами здесь
14
Парсинг json , переменные из json Парсинг JSON'а Парсинг Json Парсинг Json Парсинг JSON Парсинг Json Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |