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

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

  • Джексон
  • Google GSon

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

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

Ответ 1

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

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

Ответ 2

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

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

  • Расширенная поддержка аннотаций; включая полное наследование и расширенные аннотации "mix-in" (ассоциировать аннотации с классом для случаев, когда вы не можете их напрямую добавлять).
  • Потоковое (инкрементное) чтение, запись, для случаев сверхвысокой производительности (или с ограничением памяти); может сочетаться с привязкой данных (привязать поддеревья) - EDIT: последние версии Gson также включают в себя потоковый считыватель.
  • Древовидная модель (DOM-подобный доступ); может конвертировать между различными моделями (поток дерева ↔ java object ↔ )
  • Можно использовать любые конструкторы (или статические методы factory), а не только конструктор по умолчанию
  • Доступ к полям и геттерам/сеттерам (ранее используемые версии gson использовали только поля, это могло измениться)
  • Встроенная поддержка JAX-RS
  • Взаимодействие: также можно использовать аннотации JAXB, поддерживает/обходится для общих пакетов (joda, ibatis, cglib), языки JVM (groovy, clojure, scala)
  • Возможность принудительной обработки статического (объявленного) типа для вывода
  • Поддержка десериализации полиморфных типов (Jackson 1.5) - может сериализовать и десериализовать такие вещи, как List правильно (с дополнительной информацией о типе)
  • Интегрированная поддержка двоичного содержимого (base64 to/from JSON Strings)

Ответ 3

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

Ответ 4

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

Вот две связанные ссылки

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

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

Ответ 5

Кажется, что GSon не поддерживает JAXB. Используя аннотированный класс JAXB для создания или обработки сообщения JSON, я могу использовать один и тот же класс для создания интерфейса Restful Web Service с помощью spring MVC.