Джексон против. Gson
После поиска некоторых существующих библиотек для JSON я, наконец, закончил с этими двумя:
Я немного частично отношусь к 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.