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)