Вкратце, я пытаюсь написать код, чтобы загрузить файл 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;
}
Не могли бы вы предоставить код функции loadJSON?
@aBnormaLz Конечно. Я добавил это выше
@MarcinOrlowski Да, но это правильно, я ссылаюсь на каждый элемент массива JSON с помощью jsonArray.optString(0);. Это не делает его правильным, но пока я ссылаюсь на него именно так
Android (и Java в целом) сильно ориентирован на XML. Если у вас нет особых причин для использования json, вам следует придерживаться XML. Нет причин использовать 2 разных языка разметки в одном проекте, если только вам действительно не нужно
Я удалил тег android, поскольку нет никаких доказательств того, что этот пост связан с Android.




Хорошо, поэтому я думаю, что после этого JSONArray jsonArray = new JSONArray(loadJSON()); ваш jsonArray будет содержать только первую строку файла (поскольку файл не является допустимым json)
Я думаю, вы должны прочитать строки файла в List<String>, а затем вызвать конструктор JSONArray для каждого элемента внутри цикла (поскольку все ваши строки являются допустимыми Jsons, но не весь файл)
Надеюсь, это поможет. Если нет, я думаю, вам следует предоставить немного больше кода, чтобы я мог запустить его локально.
Это не действительный JSON в целом, а просто набор строк с отдельными массивами JSON.