Содержание
OpenJDK добавит нативный JSON API для Java — встроенная поддержка JSON упростит парсинг, обработку и создание данных без внешних библиотек
Разработчики OpenJDK анонсировали планы по созданию встроенного JSON API для Java. Этот шаг должен упростить работу с JSON-документами, не требуя установки сторонних библиотек.
Новый API станет частью стандартной библиотеки Java и будет следовать принципу «батарейки в комплекте», который предполагает, что базовые функции должны быть доступны без внешних зависимостей.
Основные особенности
Простой интерфейс
Новый API будет включать минимальный набор классов для работы с JSON, включая:
- JsonValue — базовый интерфейс для всех JSON-значений;
- JsonObject — коллекция ключ-значение;
- JsonArray — упорядоченный список значений;
- JsonString — строковое значение;
- JsonNumber — числовое значение;
- JsonBoolean — логическое значение;
- JsonNull — пустое значение.
Вот как это будет выглядеть:
interface JsonValue { } interface JsonArray extends JsonValue { List<JsonValue> values(); } interface JsonObject extends JsonValue { Map<String, JsonValue> members(); } interface JsonNumber extends JsonValue { Number toNumber(); } interface JsonString extends JsonValue { String value(); } interface JsonBoolean extends JsonValue { boolean value(); } interface JsonNull extends JsonValue { }
Пример использования
API будет поддерживать базовые операции, такие как разбор строк JSON и преобразование значений:
JsonValue doc = Json.parse("{"name": "John", "age": 30}"); if (doc instanceof JsonObject o && o.members().get("name") instanceof JsonString s && s.value().equals("John") && o.members().get("age") instanceof JsonNumber n && n.toNumber() instanceof Integer age) { System.out.println("Name: " + s.value() + ", Age: " + age); }
Со временем, по мере добавления новых возможностей для сопоставления паттернов (pattern matching) в Java, этот код станет еще более лаконичным.
Работа с числами
Поскольку JSON не различает целые и десятичные числа, новый API будет предлагать несколько способов работы с числами:
- Получение строкового представления числа.
- Преобразование строки в BigDecimal для точной работы с десятичными числами.
- Преобразование в стандартные числовые типы Java (Long, Double, BigInteger) с автоматическим выбором подходящего типа.
Совместимость и производительность
Первая версия прототипа уже доступна в sandbox-репозитории OpenJDK.
Несмотря на раннюю стадию разработки, она успешно прошла большинство тестов из JSONTestSuite, за исключением случаев с дублирующимися ключами, которые намеренно запрещены для упрощения обработки JSON-объектов.
Дальнейшие шаги
Разработчики планируют оформить предложение по улучшению языка (JEP) для включения нового API в будущие версии JDK.
Это может быть обновление существующего JEP 198 (Light-Weight JSON API) или полностью новый документ.
Насколько нужна Java встроенная библиотека для работы с JSON?Жизненно необходимаС ней лучше, чем без нееМожно обойтись и сторонними решениями