16.06, ООО «ВК»
16.06, ООО «ВК»
16.06, ООО «ВК»

OpenJDK добавит нативный JSON API для Java — первые подробности

Новости Отредактировано

OpenJDK добавит нативный JSON API для Java — встроенная поддержка JSON упростит парсинг, обработку и создание данных без внешних библиотек

432 открытий4К показов
OpenJDK добавит нативный JSON API для Java — первые подробности

Разработчики 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 будет предлагать несколько способов работы с числами:

  1. Получение строкового представления числа.
  2. Преобразование строки в BigDecimal для точной работы с десятичными числами.
  3. Преобразование в стандартные числовые типы Java (Long, Double, BigInteger) с автоматическим выбором подходящего типа.

Совместимость и производительность

Первая версия прототипа уже доступна в sandbox-репозитории OpenJDK.

Несмотря на раннюю стадию разработки, она успешно прошла большинство тестов из JSONTestSuite, за исключением случаев с дублирующимися ключами, которые намеренно запрещены для упрощения обработки JSON-объектов.

Дальнейшие шаги

Разработчики планируют оформить предложение по улучшению языка (JEP) для включения нового API в будущие версии JDK.

Это может быть обновление существующего JEP 198 (Light-Weight JSON API) или полностью новый документ.

Насколько нужна Java встроенная библиотека для работы с JSON?
Жизненно необходима
С ней лучше, чем без нее
Можно обойтись и сторонними решениями
Следите за новыми постами
Следите за новыми постами по любимым темам
432 открытий4К показов