Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpJsEr 148 of 322 menu
◀ ▶

Ошибки разбора JSON в Java

Метод readValue ожидает синтаксически корректный JSON и типы, которые можно присвоить полям класса. Лишняя запятая, незакрытая скобка или строка вместо числа приводят к исключению из пакета Jackson.

Локальная строка с синтаксической ошибкой не должна ронять всю программу, если разбор только один из шагов обработки. Исключение перехватывают и печатают сообщение:

import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.List; public class Main { public static void main(String[] args) { String broken = "[\"a\", \"b\", \"c\",]"; ObjectMapper mapper = new ObjectMapper(); try { List<String> items = mapper.readValue( broken, new TypeReference<List<String>>() {} ); System.out.println("ok"); } catch (Exception ex) { System.out.println(ex.getMessage()); } } }

Для списка без параметров типа в сигнатуре метода используют TypeReference: так Jackson сохраняет информацию о List<String> на этапе выполнения.

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

import com.fasterxml.jackson.databind.ObjectMapper; public record Badge(String label, int level) {} public class Main { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); try { mapper.readValue("{\"label\":\"pro\"}", Badge.class); } catch (Exception ex) { System.out.println(ex.getClass().getSimpleName()); } } }

Перед разбором ответа сети имеет смысл проверить код HTTP и только при успехе вызывать readValue. HTML-страница ошибки в теле ответа не превратится в ваш record и должна обрабатываться отдельно.

Дан код:

String json = "[1, 2,";

Попытайтесь получить из неё список строк. Выведите результат или текст ошибки, не прерывая работу программы аварийно.

Дана строка JSON:

String raw = "{\"level\":1}";

Разберите эту строку как Badge с двумя компонентами. Перехватите исключение и выведите короткое имя класса ошибки.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить