🔥 Java может получить JSON из коробки: JEP 540 стал Candidate

Чтобы прочитать пару полей из JSON в небольшом CLI, скрипте или утилите, Java-проекту до сих пор нужна внешняя библиотека. JEP 540: Simple JSON API (Incubator) предлагает закрыть этот базовый сценарий стандартным модулем jdk.incubator.json.

Важно: статус Candidate ещё не означает попадание в конкретную версию JDK. JEP пока не назначен ни на JDK 28, ни на другой релиз, а API остаётся инкубационным и может измениться.

🛠 Что предлагают

В центре API — sealed-интерфейс JsonValue и шесть типов, соответствующих модели JSON:

  • JsonObject
  • JsonArray
  • JsonString
  • JsonNumber
  • JsonBoolean
  • JsonNull

Документ парсится одним вызовом Json.parse(), после чего по дереву можно перемещаться через

🔥 Java может получить JSON из коробки: JEP 540 стал Candidate, image #1

Если поле отсутствует или имеет неожиданный тип, API выбрасывает JsonValueException с путём и позицией

ошибки. Для необязательных полей предусмотрен tryGet() (возвращает Optional), а для обработки JSON - null — tryValue().

Генерация тоже входит в предложение: компактный JSON возвращает toString(), форматированный с отступами — статический метод Json.toDisplayString(json, indent).

🔒 Парсер намеренно строгий

JEP ориентируется на RFC 8259 и отклоняет:

  • комментарии;
  • trailing commas;
  • повторяющиеся имена полей внутри объекта;
  • расширения вроде JSON5.

Такой подход должен уменьшить неоднозначность при обмене данными между разными системами.

⚠️ Это не замена Jackson

Авторы специально ограничили область применения. В API не будет:

  • data binding между JSON и Java-объектами;
  • потокового (streaming) парсинга;
  • расширенного конфигурирования;
  • нестандартных JSON-диалектов.

Кроме того, модель древовидная: исходный документ должен целиком помещаться в памяти как String или char[].

Поэтому для DTO, кастомной сериализации и больших payload'ов по-прежнему нужны Jackson, Gson или Jakarta

JSON. А вот для небольших интеграций, конфигурационных файлов, JDK-инструментов и разовых утилит новый

API может убрать лишнюю зависимость и заметно сократить бойлерплейт.

💡 Чтобы попробовать

API поставляется в инкубаторном модуле и требует флага --add-modules jdk.incubator.json как при

компиляции, так и при запуске:

bash
javac --add-modules jdk.incubator.json Weather.java
java --add-modules jdk.incubator.json Weather

💬 Мнение

Хороший дизайн именно потому, что он не пытается стать «ещё одним Jackson». JDK закрывает минимальный сценарий: строго распарсить JSON, пройти по дереву и собрать документ обратно. Всё сложное остаётся специализированным библиотекам.

Использовали бы стандартный JDK API для небольших JSON-интеграций или предпочли бы оставить один JSON-стек на Jackson во всех проектах?

4 views·1 share