Jackson und Gson sind die vollständigsten Java-JSON-Pakete in Bezug auf die tatsächliche Datenbindungsunterstützung; viele andere Pakete bieten nur eine primitive Map/List-Bindung (oder ein entsprechendes Baummodell). Beide Pakete bieten vollständige Unterstützung für generische Typen sowie ausreichende Konfigurierbarkeit für viele gängige Anwendungsfälle.
Da ich mit Jackson besser vertraut bin, hier einige Aspekte, bei denen ich denke, dass Jackson eine vollständigere Unterstützung bietet als Gson (bitte entschuldigen Sie, wenn ich eine Funktion von Gson übersehen habe):
- Umfassende Unterstützung von Anmerkungen, einschließlich vollständiger Vererbung und erweiterter "Mix-in"-Anmerkungen (Verknüpfung von Anmerkungen mit einer Klasse für Fälle, in denen sie nicht direkt hinzugefügt werden können)
- Streaming (inkrementelles) Lesen, Schreiben, für extrem leistungsstarke (oder speicherbegrenzte) Anwendungsfälle; kann mit Datenbindung (Bindung von Teilbäumen) kombiniert werden -- EDITAR : Die neuesten Versionen von Gson enthalten auch Streaming-Reader
- Baummodell (DOM-ähnlicher Zugriff); kann zwischen verschiedenen Modellen konvertieren (Baum <-> Java-Objekt <-> Stream)
- Kann beliebige Konstruktoren (oder statische Fabrikmethoden) verwenden, nicht nur den Standardkonstruktor
- Feld- und Getter/Setter-Zugriff (frühere gson-Versionen verwendeten nur Felder, dies kann sich geändert haben)
- Sofort einsetzbare JAX-RS-Unterstützung
- Interoperabilität: kann auch JAXB-Annotationen verwenden, bietet Unterstützung/Workarounds für gängige Pakete (joda, ibatis, cglib), JVM-Sprachen (groovy, clojure, scala)
- Möglichkeit, statische (deklarierte) Typbehandlung für die Ausgabe zu erzwingen
- Unterstützung für die Deserialisierung polymorpher Typen (Jackson 1.5) -- kann Dinge wie List korrekt serialisieren UND deserialisieren (mit zusätzlichen Typinformationen)
- Integrierte Unterstützung für binäre Inhalte (base64 zu/von JSON Strings)