1. Знакомство с Джексоном — лучшей библиотекой JSON в мире

JSON
1. Знакомство с Джексоном — лучшей библиотекой JSON в мире

Жизнь слишком коротка, чтобы делать то, что вообще никому не нужно. Эта статья была"https://www.yourbatman.cn"Включено, включая стек технологий Spring, MyBatis, JVM, промежуточное ПО и другие маленькие и красивые"столбец"на бесплатное обучение. Обратите внимание на общедоступный номер【"Утопия BAT"] Прорваться один за другим, глубокое мастерство,

предисловие

Всем привет, меня зовут Брат А. Предыдущая статья【Fastjson пора прощаться】Брат А попрощался с Фастисоном.Начиная с этой серии мы вместе войдем в библиотеку Джексона. Конечно, сказать, что это лучшая JSON-библиотека в мире, — это не утверждение, это то, что написано на официальном сайте, я это отрицаю.

Проекту нужна только библиотека JSON

Библиотека Java JSON, вы"Как минимум"Должен был использовать/слышать об этих трех:Jackson、Gson、Fastjson. Для самостоятельного проекта по принципу наименьших зависимостей должно хватить только одной библиотеки JSON. Но статус-кво таков: коллеги могут наблюдать и наблюдать за собственными проектами, и у большинства из них одновременно есть 2 вида JSON-библиотек, или 3 вида, а то и больше...

Описание: в"в рамках того же проекта", если есть несколько реализаций одной и той же функции, это плохое явление. Это запутает управление (например, неудобно форматировать дату унифицированным образом), а если экспортов будет несколько, то будет большая проблема, когда вы захотите их закрыть.

как"квалифицированный"Для архитекторов/инженеров поддержание простейших зависимостей (согласованных зависимостей) должно быть технической парадигмой, потому что простая согласованность может принести большие преимущества.Причина очень проста: эффективность общения/сотрудничества двух Java-программистов должна быть более эффективной, чем 1 связь Java + 1 Python.

так что, какую библиотеку JSON нам выбрать? Очевидный ответ - Джексон. Поскольку она работает очень хорошо во всех аспектах, это самая популярная и лучшая библиотека JSON в мире. ПучокJacksonКак единственная JSON-библиотека в проекте, есть небольшой порог (подумайте, почему вы используете Fastjson), так что она здесь, желаю вам перешагнуть этот порог и стандартизировать ее,"Помочь вам добавить основные сильные стороны, что является самым важным значением этой колонки.".


Джексон — лучшая JSON-библиотека в мире.

Jackson — это простая и мощная программа на основе Java."Библиотека приложений". это можно сделать легко"Java-объект"и"JSON-объект"(документ xml или другие форматы) для взаимного преобразования. Сообщество Джексона относительно активно, а скорость обновления относительно высока. Библиотека Джексона имеет следующие особенности:

  • Высокая производительность и стабильность: низкое использование памяти, отличная производительность синтаксического анализа для больших/маленьких строк JSON и больших/маленьких объектов.
  • Высокая популярность: это выбор по умолчанию для многих популярных фреймворков.
  • Простота использования: предоставляет высокоуровневый API, который значительно упрощает повседневное использование.
  • Нет необходимости вручную создавать сопоставления: большинство взаимосвязей между сериализацией и типами Java встроены.
  • Чистый JSON: создавайте чистый, компактный и маленький JSON.
  • Никаких сторонних зависимостей: зависит только от JDK
  • "Весеннее экологическое благословение": jackson — парсер JSON/XML по умолчанию для семейства Spring (получите его, вы сможете приблизиться к Spring после изучения этой колонки, убив двух зайцев одним выстрелом)

Соглашение о версии: номер версии, используемый в этом столбце, фиксируется как2.11.0(выпуск 2020-04), GAV выглядит следующим образом:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.11.1</version>
</dependency>

Чтобы сохранить единообразие версий, последующиеSpring Boot(2.3.0.RELEASE)/Spring Framework(5.2.6.RELEASE)Используется последняя версия, потому что ее встроенный jackson также является версией, описанной в этой колонке.


текст

внимательный друг сверхуgroupIdЗдесь вы можете увидеть:jacksonэто принадлежитfasterxmlэта организация. В духе прослеживания происхождения мы можем немного узнать об этой организации:официальный сайт fastxmlСкриншот ниже

Простой перевод: FasterXML — это синтаксический анализатор XML для потоков Woodstox, синтаксический анализатор JSON для потоков Jackson, неблокирующий синтаксический анализатор XML Aalto и"Растущий"Бизнес, стоящий за служебной библиотекой и семейством расширений.

Как очень популярная библиотека с открытым исходным кодом, эта страница официального веб-сайта должна освежить ваше восприятие. Дело не в том, что в нем мало содержания, но на самом деле его подробное введение опубликовано вgithubНа, это основной канал для нас, чтобы узнать его дальше.

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

fasterxmlорганизовать это"Непосредственно аффилированный первоклассный проект"На самом деле их довольно много:

  1. "com.fasterxml.jackson"
  2. com.fasterxml.uuid
  3. com.fasterxml.woodstox
  4. ...

очевидно,"Эта колонка будет посвящена только проекту Джексона.", проект — самая известная и самая важная часть организации.


Введение на официальном сайте

Чтобы понять новую технологию, первым делом нужно заглянуть на ее официальный сайт. Как объяснялось выше,fasterxmlОрганизуйте его для размещения содержимого домашней страницы каждого проекта на github, и Джексон, конечно же, не исключение.официальный сайт ДжексонаОн описывает себя следующим образом:

Джексона раньше звали:"Java (или платформа JVM)"стандартная библиотека JSON или Java"Лучший парсер JSON", или просто ""Java JSON""

От этого названия он властный и разоблаченный, NB недостаточно хорош, достаточно увидеть его статус и популярность в парсинге JSON, конечно, в основном это самоуверенность

Что еще более важно, Jackson — это набор платформ JVM."Обработка данных (не ограничиваясь JSON)"Набор инструментов: включен"первый класс"Анализатор JSON/генератор JSON, библиотека привязки данных (POJO в JSON и из него), а также предоставляет соответствующие модули для поддержки форматов данных, таких как Avro, BSON, CBOR, CSV, Smile, Properties, Protobuf, XML или YAML, и даже поддерживает настройку модуля формата больших данных.


Ветки: 1.x и 2.x

Джексон имеет две основные ветви:

  • 1.х ветка, 1.9.13. В режиме обслуживания выпускаются только выпуски с исправлениями ошибок (последний выпуск в июле 2013 г.)
  • 2.x — это версия, находящаяся в разработке (постоянно обновляется и обновляется, версия 2.0.0 была выпущена в марте 2012 г.)

Примечание. В этих двух основных версиях используется"Различные имена пакетов Java"и Maven GAV, поэтому они несовместимы друг с другом,"но мирное сосуществование". Проект может зависеть от обеих версий без конфликтов. Это задумано, и эта стратегия была выбрана для более плавного перехода с 1.x на 2.x.

Примечание. Сейчас 2020 год, и можно сказать, что версия 1.x устарела (за исключением очень старых проектов, которые все еще используются), поэтому в этой колонке не будет ничего о версии 1.x.

Описание активной ветки 2.x

В настоящее время ветка 2.x имеет следующие активные ветки:

  • 2.12: Следующий второстепенный релиз, в настоящее время находится в разработке.
  • 2.11:"Текущая стабильная версия". Активно поддерживаемая ветвь, которая активно и постоянно выпускает исправления.
  • 2.10: Последняя стабильная ветка, патчи все еще будут выпущены без остановки обслуживания
  • 2.9: Неактивная ветка, будут выпущены только микропатчи, хотя все еще активные, но менее активные
  • Другие ветки 2.x: будут выпущены только основные исправления безопасности.
  • master: основная ветвь. Следующая крупная ветка 3.0 находится в стадии быстрой разработки

Примечание. Из-за разницы между 2.11.0 и 2.11.x эту небольшую ветку можно игнорировать.


Введение модуля

Джексон — это открытый исходный код и открытое сообщество. Большинство проектов/модулей, перечисленных ниже, разработаны командой разработчиков Jackson."ведущий", но и некоторые члены сообщества Джексона


Три основных модуля

"основной модуль (core module) является основой для построения модулей расширения". В настоящее время у Джексона есть 3 основных модуля:

Примечание. Идентификаторы групп основных модулей:<groupId>com.fasterxml.jackson.core</groupId>, идентификатор артефакта отображается в следующих модулях

  • Модуль обработки потокового вещания (jackson-core): определяет базовый API для обработки потоков: JsonPaser и JsonGenerator и т. д., и содержит"json специфичный"реализация.
  • Аннотации стандартный модуль аннотаций (jackson-annotations): содержит стандартные аннотации Джексона
  • Модуль привязки данных Databind (jackson-databind): реализует поддержку привязки данных (и сериализации объектов) в потоковом пакете;"Это зависит от двух модулей выше", который также является модулем, в котором расположены высокоуровневые API-интерфейсы Джексона (например, ObjectMapper).

В практической разработке на уровне приложения мы будем использовать только модуль привязки данных Databind, поэтому он является главным приоритетом в этой серии. Вот важные"сторонние модули".


модуль типа данных

Эти расширения являются подключаемыми модулями Джексона (черезObjectMapper.registerModule()регистрацию, то же самое ниже) и поддержку различных часто используемых типов данных библиотеки Java путем добавления сериализаторов и десериализаторов, так чтоJackson databindСумка(ObjectMapper / ObjectReader / ObjectWriter), чтобы иметь возможность плавно читать/записывать/преобразовывать эти типы.

Некоторыми сторонними модулями руководит и обслуживает непосредственно официальный персонал Джексона (основные модули), а некоторые являются чисто поведением сообщества. Теперь функции каждого модуля представлены в соответствии с этими двумя категориями:

"Официальное прямое обслуживание:"

Примечание. Идентификаторы групп этих официально поддерживаемых модулей типов данных унифицированы следующим образом:<groupId>com.fasterxml.jackson.datatype</groupId>, а номер версии соответствует основному номеру версии

  • Модули типов стандартных коллекций:
    • Guava: типы данных коллекции, которые поддерживают Guava
    • HPPC: слегка
    • PCollections: опущен (поддержка добавлена ​​в Jackson 2.7)
  • Hibernate: поддержка некоторых функций Hibernate, таких как отложенная загрузка, прокси-сервер и т. д.
  • Joda: типы данных, которые поддерживают дату/время Joda
  • JDK7: поддержка JDK7 (Примечание: после версии 2.7 это бесполезно, учитывая, что минимальное требование к версии JDK после версии 2.7 — 7)
  • Java8: он разделен на следующие три подмодуля для поддержки Java8.
    • jackson-module-parameter-names: Этот модуль имеет доступ к именам параметров конструктора и метода, допуская пропуски@JsonProperty(Конечно, предполагается, что вы должны добавить параметры компиляции:-parameters)
    • jackson-datatype-jsr310: поддерживает API времени JSR310, недавно добавленный Java8.
    • jackson-datatype-jdk8: поддержка других API, кроме API времени Java8, напримерOptional
  • JSR-353/org.json: опущено

"Неофициальное прямое обслуживание:"

Примечание. Идентификатор группы этих модулей, непосредственно поддерживаемых неофициальными, не определен, каждый модуль может быть другим, и номера их версий не будут соответствовать официальному основному номеру версии.

  • jackson-datatype-bolts: поддержка типов коллекций Yandex Bolts
  • jackson-datatype-commons-lang3: поддерживает некоторые типы в Apache Commons Lang v3.
  • jackson-datatype-money: поддержкаjavax.money
  • jackson-datatype-json-lib: для дальнихjson-libПоддержка этой библиотеки
  • ...

модуль формата данных

Модули формата данных (модули формата данных) обеспечивают"Помимо JSON"поддержка формата данных. Большинство из них просто реализуют абстракцию потокового API, чтобы компоненты с привязкой к данным можно было использовать как есть.

"Официальное прямое обслуживание:"

Примечание. Все идентификаторы групп модулей в этих форматах данных<groupId>com.fasterxml.jackson.dataformat</groupId>, и следуйте основному номеру версии

  • Avro/CBOR/Ion/Protobuf/Smile(binary JSON): все это форматы двоичных данных, и их идентификаторы артефактов:<artifactId>jackson-dataformat-[FORMAT]</artifactId>
  • CSV/Properties/"XML/YAML": Эти форматы знакомы, такая же поддержка этих распространенных текстовых форматов

"Неофициальное прямое обслуживание:"Поскольку неофициальные напрямую поддерживаемые модули слишком частичны, они опущены.


Платформа JVM другие языки

На официальном сайте говорится, что Джексон"JVM-платформа"Парсер, поэтому уровень языка не ограничивается самой Java, но также охватывает два других основных языка JVM: Kotlin и Scala.

Описание: GroupIds этого блока:<groupId>com.fasterxml.jackson.module</groupId>, номер версии следует за основным номером версии

  • jackson-module-kotlin: обрабатывать исходные типы kotlin
  • jackson-module-scala_[номер версии scala]: обрабатывать исходный тип scala

Поддержка режима

Аннотации Джексона определяют ожидаемые свойства и ожидаемую обработку для POJO, что позволяет генерировать"внешний режим". Некоторые функции включены в расширения формата данных, описанные выше, но есть также много независимых инструментов схемы, таких как:

  • Задача Ant для создания схемы JSON: создание JSON из классов Java с использованием библиотеки Jackson и модулей расширения при использовании Apache Ant
  • jackson-json-schema-maven-plugin: плагин maven для генерации JSON
  • ...

Примечание. Эта часть не будет упоминаться далее, чтобы не путать основное содержание, поскольку практических сценариев применения слишком мало.


Джексон-младший (для мобильного)

Несмотря на то чтоJackson databind(например, ObjectMapper) — хороший выбор для универсальной привязки данных, но его"Занимаемое пространство (размер упаковки Jar)"и"накладные расходы при запуске"Могут быть проблемы в некоторых областях: мобильные, особенно при легком использовании (чтение или запись). В этом случае полный API Джексона неприемлем.

По всем этим причинам официальные лица Джексона решили создать"проще и меньше"Библиотеки: Джексон мл. Он по-прежнему основан на Streaming API, но не полагается на привязку данных и аннотацию. Следовательно, его размер (использование памяти jar и времени выполнения) намного меньше, а его API очень компактен, поэтому он подходит для мобильных приложений, таких как приложения.

<dependency>
    <groupId>com.fasterxml.jackson.jr</groupId>
    <artifactId>jackson-jr-objects</artifactId>
</dependency>

это просто зависит отjackson-coreмодуль, поэтому громкость очень хорошо контролируется. Общий размер трех основных модулей Джексона составляет около 1700 КБ (320 + 70 + 1370). Размер Jackson jr контролируется на уровне 95 КБ (даже если добавить 320 модулей ядра, это меньше 500 КБ).

Для тех, кто разрабатывает фон Java, мы не чувствительны к памяти, и это последнее слово, простое в использовании и мощное. следовательноjackson-jrЭто просто краткое пояснение, и оно не будет упоминаться далее в этой колонке.


Отчет об уязвимостях

Хотя Джексон достаточно стабилен и безопасен, святого здесь нет. Отчеты об уязвимостях для него, последний раз в2019-07-23:Удаленное выполнение кода FasterXML jackson-databind (CVE-2019-12384)Дополнительные и обновленные справочные ссылки на подробные отчеты об уязвимостях (постоянно обновляются):Ознакомьтесь с отчетом об уязвимостях Chuangyu Jackson


Сравнение библиотек Java JSON

На рынке существует множество библиотек JSON.Основываясь на мнениях некоторых специалистов по Java, вот некоторые существующие независимые ссылки для сравнения, чтобы вы могли узнать, какую библиотеку использовать:

Примечание. Несколько справочных ссылок, размещенных здесь, являются справочными статьями, предоставленными на официальном веб-сайте, и все они являются официальными иностранными документами.

Конечно, вас может больше беспокоить сравнение Джексона и Фастсона, так что пока не беспокойтесь (хотя сравнение было выше), это главное блюдо в конце этой колонки, и оно будет объяснено в подробно там.


Суммировать

Эта статья сочетает в себе официальный веб-сайт, чтобы понять полную картину Джексона, и использует всестороннюю перспективу, чтобы понять функциональные модули, предоставленные Джексоном в целом, что обеспечивает индекс для последующего объяснения столбца.

из Джексона"Быстрое обновление, поддерживается множество модулей"Достаточно увидеть активность его сообщества. И для того, чтобы угодить рынку, он находится в2.10Коммерчески поддерживаемые услуги также доступны после выпуска: партнерство с Tidelift обеспечивает коммерческую поддержку и обслуживание зависимостей с открытым исходным кодом для пользователей для создания приложений. Экономьте время, снижайте риски и улучшайте работоспособность кода (коммерческая поддержка доступна за отдельную плату).

Я полагаю, что вы получили общее представление о Джексоне благодаря этой статье, и вам должно быть интересно ее изучить. Вы найдете это, когда будете копать глубже"Элегантный дизайн, высокая масштабируемость", не сравним с общей отечественной библиотекой классов. Если Fastjson — отличная библиотека JSON, то Jackson — лучшая экосистема JSON.


"Эта колонка платная на CSDN, а в публичном аккаунте она доступна бесплатно.Приглашаем обратить внимание на публичный аккаунт Brother A [BAT's Utopia]"


Следуй за братом А

Author Брат А (Ваш Бэтмен)
персональный сайт www.yourbatman.cn
E-mail yourbatman@qq.com
"WeChat" fsx641385712
"活跃平台"
"публика" Утопия летучих мышей (ID: утопия летучих мышей)
планета знаний Утопия BAT
Рекомендуемые статьи дня Рекомендуемые статьи дня
BAT的乌托邦
Утопия BAT