@Important_question

Как проверить на корректность Json файла?

Пытаюсь более детально обработать ошибки синтаксиса json, нужно чтобы при считке файла и при отсутствие какого-либо поля программа спрашивала у пользователя готов ли он дописать
это поле либо пропустить этот объект и загрузить оставшиеся объекты в файле в коллекцию.
Допустим, мы удалили из файла поле name (т.е полностью "name": "P3111"). И надо чтобы программа выдавала У вас в одном из объектов ошибка поля name. Xотите его дописать либо пропустить загрузку этого объекта?(true/false)
Мой метод reader( читатель json)
/**
     * Чтение коллекции из файла
     *
     * @return коллекция, которая была считана из файла
     */
    public PriorityQueue<StudyGroup> readCollection() {
        if (file!= null) {
            if (file.exists() & !file.canRead()) {
                System.out.println("\u001B[37m" + "\u001B[31m" + "Недостаточно прав для чтения данных из файла. Добавьте права на чтение и запустите программу вновь" + "\u001B[31m" + "\u001B[37m");
                System.exit(0);
            }
            try (FileReader fileScanner= new FileReader(file)) {
                BufferedInputStream reader= new BufferedInputStream(new FileInputStream((file)));
                Type collectionType = new TypeToken<PriorityQueue<StudyGroup>>(){}.getType();
                PriorityQueue<StudyGroup> collection = gson.fromJson(fileScanner, collectionType);
                reader.readAllBytes();
                System.out.println("\u001B[37m" + "\u001B[33m" + "Коллекция успешно загружена!" + "\u001B[33m" + "\u001B[37m");
                if (collection == null) return new PriorityQueue<>();
                return collection;
            } catch (FileNotFoundException e) {
                System.err.println("Файл с таким именем не найден :(");

            } catch (IOException e) {
                System.err.println("Ошибка ввода-вывода");

            } catch (JsonSyntaxException e) {
                System.err.println("Формат файла не удовлетворяет условию");
            }
           catch (RuntimeException e){
               Messages.normalMessageOutput("\u001B[37m" + "\u001B[33m"+"Файл написан с ошибкой, перепроверьте файл и запустите программу снова"+ "\u001B[33m" + "\u001B[37m");
           }
        } else
            System.out.println("\u001B[37m" + "\u001B[31m" + "Системная переменная с загрузочным файлом не найдена!" + "\u001B[31m" + "\u001B[37m");
        return new PriorityQueue<>();

    }

Json файл
[{"id":4229754249302793379,"name":"P3111","coordinates":{"x":32,"y":-360.0},"creationDate":{"date":{"year":2021,"month":4,"day":27},"time":{"hour":10,"minute":41,"second":15,"nano":506122400}},"studentsCount":32,"expelledStudents":5,"formOfEducation":"DISTANCE_EDUCATION","semesterEnum":"FIRST","groupAdmin":{"name":"Маша","passportID":"123","eyeColor":"BLACK","hairColor":"BLACK","nationality":"USA"}},{"id":5576486070722418065,"name":"P3111","coordinates":{"x":32,"y":-360.0},"creationDate":{"date":{"year":2021,"month":4,"day":27},"time":{"hour":10,"minute":41,"second":24,"nano":974652600}},"studentsCount":32,"expelledStudents":5,"formOfEducation":"DISTANCE_EDUCATION","semesterEnum":"FIRST","groupAdmin":{"name":"Маша","passportID":"123","eyeColor":"BLACK","hairColor":"BLACK","nationality":"USA"}}]
  • Вопрос задан
  • 831 просмотр
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
Чтобы проверить корректность json файл нужно для начала его прочитать и десериализовать.
Можно попробовать сделать следующее:
1) Прочитать json в pojo и проверить поля на null. Если одно из полей null, то попросить пользователя ввести новое значение для этого поля.
2) Либо можно еще прочитать json при помощи jackson. А там если вы не добавили аннотацию @JsonInclude(Include.NON_NULL) к классу, то при десериализации будет выброшено соответствующее исключение. Так вот, можно словить это исключение и отобразить сообщение для юзера.
Примерно вот, такие идеи...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект