Джексон против 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.