@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"}}]
  • Вопрос задан
  • 1019 просмотров
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
Чтобы проверить корректность json файл нужно для начала его прочитать и десериализовать.
Можно попробовать сделать следующее:
1) Прочитать json в pojo и проверить поля на null. Если одно из полей null, то попросить пользователя ввести новое значение для этого поля.
2) Либо можно еще прочитать json при помощи jackson. А там если вы не добавили аннотацию @JsonInclude(Include.NON_NULL) к классу, то при десериализации будет выброшено соответствующее исключение. Так вот, можно словить это исключение и отобразить сообщение для юзера.
Примерно вот, такие идеи...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы