Джексон против Gson

После поиска в некоторых существующих библиотеках JSON я наконец-то получил эти два:

  • Джексон
  • Google GSon

Я немного неравнодушен к GSON, но в сети говорят, что GSon страдает от некоторой небесной проблемы с производительностью (по состоянию на сентябрь 2009 года).

Я продолжаю свое сравнение; А пока я ищу помощи, чтобы принять решение.

5 ответов

Решение

Я провел это исследование на прошлой неделе, и у меня были те же две библиотеки. Поскольку я использую Spring 3 (который принимает Джексона в его стандартном представлении Json ' JacksonJsonView'), для меня было более естественным сделать то же самое. 2 lib практически одинаковы... в конце они просто отображаются в файл json!:)

Во всяком случае, как вы сказали, Джексон имеет + в исполнении, и это очень важно для меня. Проект также довольно активен, как вы можете видеть на их веб-странице, и это тоже очень хороший знак.

Jackson и Gson - самые полные пакеты Java JSON, касающиеся фактической поддержки привязки данных; многие другие пакеты обеспечивают только примитивную привязку Map/List (или эквивалентную древовидную модель). Оба имеют полную поддержку универсальных типов, а также достаточную настраиваемость для многих распространенных случаев использования.

Поскольку я больше знаком с Джексоном, вот некоторые аспекты, в которых, как мне кажется, Джексон имеет более полную поддержку, чем Gson (извиняюсь, если я пропустил функцию Gson):

  • Обширная поддержка аннотаций; включая полное наследование и расширенные аннотации "mix-in" (свяжите аннотации с классом в тех случаях, когда вы не можете напрямую добавить их)
  • Потоковое (инкрементное) чтение, запись для сценариев использования со сверхвысокой производительностью (или с ограниченным объемом памяти); может смешиваться с привязкой данных (связывать поддеревья) - РЕДАКТИРОВАТЬ: последние версии Gson также включают потоковое считыватель
  • Древовидная модель (DOM-подобный доступ); можно конвертировать между различными моделями (дерево <-> объект Java <-> поток)
  • Может использовать любые конструкторы (или статические фабричные методы), а не просто конструктор по умолчанию
  • Доступ к полям и получателям / установщикам (более ранние версии gson использовали только поля, это могло измениться)
  • Встроенная поддержка JAX-RS
  • Функциональная совместимость: также может использовать аннотации JAXB, имеет поддержку / обходные пути для общих пакетов (joda, ibatis, cglib), языки JVM (groovy, clojure, scala)
  • Возможность принудительной обработки статического (объявленного) типа для вывода
  • Поддержка десериализации полиморфных типов (Jackson 1.5) - может сериализовать и десериализовать такие вещи, как List (с дополнительной информацией о типах)
  • Интегрированная поддержка бинарного контента (base64 в / из строк JSON)

Gson 1.6 теперь включает низкоуровневый потоковый API и новый парсер, который на самом деле быстрее, чем Джексон.

Добавление к другим ответам, уже приведенным выше. Если для вас важна нечувствительность к регистру, используйте Джексона. Gson не поддерживает регистронезависимость для имен ключей, в то время как Джексон поддерживает.

Вот две ссылки по теме

(Нет) Поддержка чувствительности к регистру в Gson: GSON: Как получить нечувствительный к регистру элемент от Json?

Поддержка чувствительности к регистру в Джексоне https://gist.github.com/electrum/1260489

Похоже, GSon не поддерживает JAXB. Используя аннотированный класс JAXB для создания или обработки сообщения JSON, я могу использовать тот же класс для создания интерфейса веб-службы Restful с помощью Spring MVC.

Другие вопросы по тегам