Открыть сервис

FasterXML

FasterXML — это проект с открытым исходным кодом, предоставляющий набор высокопроизводительных библиотек для обработки данных в форматах JSON, XML, YAML, CSV и других на языке Java. Основным продуктом проекта является библиотека Jackson, которая стала фактическим стандартом для сериализации и десериализации Java-объектов в JSON и обратно. Проект поддерживается одноимённой компанией FasterXML, LLC, основанной разработчиком библиотеки Jackson Тату Салоранта (Tatu Saloranta).

История

Проект FasterXML берёт начало в 2008 году, когда Тату Салоранта, работавший над библиотекой для обработки XML, решил создать новую, более быструю и гибкую альтернативу существующим решениям для работы с JSON. Первая версия библиотеки Jackson (1.0) была выпущена в 2009 году. Она быстро завоевала популярность благодаря высокой производительности, простоте использования и поддержке потоковой обработки.

В 2012 году была выпущена версия Jackson 2.0, которая стала крупным обновлением, изменившим API и архитектуру. С этого момента проект стал развиваться под эгидой компании FasterXML, LLC. В последующие годы экосистема Jackson расширилась за счёт модулей для поддержки различных форматов данных (YAML, CSV, Avro, Protobuf, CBOR, Smile) и интеграций с популярными фреймворками (Spring Boot, Dropwizard, Play Framework).

Ключевые компоненты

Экосистема FasterXML состоит из нескольких основных библиотек и модулей, сгруппированных по назначению.

Jackson Core

Базовый модуль, обеспечивающий низкоуровневую потоковую обработку JSON. Он включает:

  • JsonParser — для чтения JSON из потока.
  • JsonGenerator — для записи JSON в поток.
  • JsonFactory — для создания парсеров и генераторов.

Jackson Core не зависит от аннотаций и рефлексии, что делает его лёгким и быстрым для простых задач.

Jackson Databind

Основной модуль для сериализации и десериализации Java-объектов. Он использует рефлексию для автоматического преобразования объектов в JSON и обратно. Поддерживает:

  • Стандартные Java-типы (String, Number, Boolean, Date, Collection, Map).
  • Пользовательские классы (POJO).
  • Аннотации для настройки поведения (например, @JsonProperty, @JsonIgnore, @JsonFormat).
  • Полиморфизм (сериализация объектов разных классов).
  • Вложенные объекты и коллекции.

Jackson Annotations

Модуль, содержащий аннотации для тонкой настройки процесса сериализации/десериализации. Наиболее часто используемые аннотации:

  • @JsonProperty — задаёт имя поля в JSON.
  • @JsonIgnore — исключает поле из сериализации/десериализации.
  • @JsonFormat — задаёт формат даты/времени.
  • @JsonInclude — управляет включением полей с null-значениями.
  • @JsonTypeInfo — для поддержки полиморфизма.

Jackson Dataformat Modules

Набор модулей для поддержки форматов данных, отличных от JSON:

  • Jackson Dataformat XML — для работы с XML.
  • Jackson Dataformat YAML — для работы с YAML.
  • Jackson Dataformat CSV — для работы с CSV.
  • Jackson Dataformat Smile — для бинарного формата Smile (оптимизирован для скорости).
  • Jackson Dataformat CBOR — для бинарного формата CBOR (Concise Binary Object Representation).
  • Jackson Dataformat Avro — для Apache Avro.
  • Jackson Dataformat Protobuf — для Protocol Buffers.

Jackson JAXRS Providers

Модуль для интеграции Jackson с Java RESTful веб-сервисами (JAX-RS). Позволяет автоматически сериализовать/десериализовать JSON в ответах и запросах REST-контроллеров.

Jackson Module Scala

Модуль для поддержки языка Scala, включающий сериализацию case-классов, коллекций Scala и других типов.

Применение

FasterXML (Jackson) широко используется в Java-разработке для:

Производительность

Jackson известен своей высокой производительностью. Он оптимизирован для минимального потребления памяти и высокой скорости обработки, особенно в режиме потокового парсинга (Streaming API). В бенчмарках Jackson часто опережает альтернативные библиотеки, такие как Gson (Google) и JSON-B (Java EE). Однако производительность может зависеть от конкретных сценариев использования (например, использование рефлексии в Jackson Databind может замедлять работу на больших объёмах данных).

Альтернативы

Основными конкурентами FasterXML (Jackson) являются:

  • Gson (Google) — более простой API, но менее производительный.
  • JSON-B (Java EE) — стандартная спецификация, менее гибкая.
  • Moshi (Square) — лёгкая библиотека для Android и Java.
  • Kotlinx.serialization — для Kotlin.

Критика

Несмотря на популярность, Jackson имеет некоторые недостатки:

  • Сложность конфигурации: из-за большого количества аннотаций и настроек новичкам может быть сложно разобраться.
  • Проблемы с безопасностью: в прошлом были обнаружены уязвимости, связанные с десериализацией недоверенных данных (например, CVE-2017-7525, CVE-2019-12384). Разработчики рекомендуют использовать ObjectMapper.enableDefaultTyping() с осторожностью.
  • Зависимость от рефлексии: может замедлять работу и вызывать проблемы в средах с ограниченной рефлексией (например, GraalVM Native Image).
  • Версионная несовместимость: обновления между мажорными версиями (1.x -> 2.x) могут требовать значительных изменений в коде.

Лицензия

Все библиотеки FasterXML распространяются под лицензией Apache License 2.0, что позволяет свободно использовать их в коммерческих и некоммерческих проектах.

Источники

  • Официальный сайт FasterXML (fasterxml.com)
  • Документация Jackson (github.com/FasterXML/jackson-docs)
  • Репозиторий Jackson на GitHub (github.com/FasterXML/jackson)
  • Статья «Jackson (JSON)» в русскоязычной технической документации
  • CVE-2017-7525, CVE-2019-12384 — база уязвимостей NVD

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →