Использование JSON в программе Java

Вкратце, я пытаюсь написать код, чтобы загрузить файл JSON в свое приложение, и в зависимости от текущего дня / месяца моя программа считывает правильный массив JSON и заполняет оставшиеся поля теми, которые хранятся в JSON. множество.

У меня есть следующий фрагмент кода:

        JSONArray jsonArray = new JSONArray(loadJSON());

        DateFormat dayOfMonth = new SimpleDateFormat("dd");
        String dayOfMonth2 = dayOfMonth.format(new Date());
        int result = Integer.parseInt(dayOfMonth2);

        DateFormat monthOfYear = new SimpleDateFormat("MM");
        String monthOfYear2 = monthOfYear.format(new Date());
        int result2 = Integer.parseInt(monthOfYear2);

        try {

            if (jsonArray.getInt(0) == result && jsonArray.getInt(1) == result2 ) {
                day = jsonArray.optString(0);
                month = jsonArray.optString(1);
                one = jsonArray.optString(2);
                two = jsonArray.optString(3);
                three = jsonArray.optString(4);
                four = jsonArray.optString(5);
                five = jsonArray.optString(6);
                six = jsonArray.optString(7);
                seven = jsonArray.optString(8);
            }
        } catch (Exception e) {
                System.out.print("Unable to find times for this day");
        }

Итак, я сохраняю dayOfMonth в переменной на основе текущей даты. Я также сохраняю monthOfYear в переменной в зависимости от того, какой год месяца.

Мой JSON содержит следующие значения:

["15","12","06:00","08:00","12:00","13:00","14:00","16:00","17:00"]
["16","11","06:26","08:03","12:09","13:46","14:17","16:05","17:42"]
["17","11","06:26","08:03","12:09","13:46","14:17","16:05","17:42"]
["18","11","06:26","08:03","12:09","13:46","14:17","16:05","17:42"]

Программа с легкостью загружает первые значения, но всякий раз, когда я перемещаю позицию первого массива JSON, она не заполняет поле значениями.

Кажется, что оператор if сравнивает только с первым массивом, содержащимся в файле .json, и если это не правильный день / месяц, он оставляет поля пустыми.

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

Загрузить JSON:

public String loadJSON() {
        String json;
        try {
            InputStream is = getAssets().open("test.json");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            json = new String(buffer, "UTF-8");
        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
        return json;
    }

Это не действительный JSON в целом, а просто набор строк с отдельными массивами JSON.

Marcin Orlowski 15.12.2018 15:22

Не могли бы вы предоставить код функции loadJSON?

aBnormaLz 15.12.2018 15:29

@aBnormaLz Конечно. Я добавил это выше

Adam 15.12.2018 15:33

@MarcinOrlowski Да, но это правильно, я ссылаюсь на каждый элемент массива JSON с помощью jsonArray.optString(0);. Это не делает его правильным, но пока я ссылаюсь на него именно так

Adam 15.12.2018 15:36

Android (и Java в целом) сильно ориентирован на XML. Если у вас нет особых причин для использования json, вам следует придерживаться XML. Нет причин использовать 2 разных языка разметки в одном проекте, если только вам действительно не нужно

wotanii 15.12.2018 16:29

Я удалил тег android, поскольку нет никаких доказательств того, что этот пост связан с Android.

Phantômaxx 15.12.2018 18:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
86
1

Ответы 1

Хорошо, поэтому я думаю, что после этого JSONArray jsonArray = new JSONArray(loadJSON()); ваш jsonArray будет содержать только первую строку файла (поскольку файл не является допустимым json)

Я думаю, вы должны прочитать строки файла в List<String>, а затем вызвать конструктор JSONArray для каждого элемента внутри цикла (поскольку все ваши строки являются допустимыми Jsons, но не весь файл)

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

Другие вопросы по теме