web-dev-qa-db-ja.com

ジャクソン対。 Gson

JSONのためにいくつかの既存のライブラリを検索した後、私はついにこれら二つのものになった。

  • ジャクソン
  • Google GSon

私はGSONに少し偏っていますが、ネット上のWordはGSonが特定の天体の性能に苦しんでいるということです issue (2009年9月現在)。

私は比較を続けています。それまでの間、私は私の心を作るための助けを探しています。

344
Suraj Chandran

私は先週この調査をしました、そして私は同じ2つの図書館に行きました。私はSpring 3を使っているので(それはデフォルトのJsonビューでJacksonを採用しています ' JacksonJsonView ')、同じことをするのはもっと自然なことでした。 2 libはほとんど同じです...最後に、彼らは単にjsonファイルにマップします! :)

とにかくあなたが言ったようにJacksonはパフォーマンスが+であり、それは私にとって非常に重要です。このプロジェクトは 彼らのWebページ からわかるように非常に活発でもあり、それはとても良い兆候です。

111
mickthompson

JacksonとGsonは、実際のデータバインディングサポートに関して最も完全なJava JSONパッケージです。他の多くのパッケージは原始的なMap/List(または同等のツリーモデル)バインディングのみを提供します。どちらもジェネリック型を完全にサポートしているだけでなく、多くの一般的なユースケースに十分な設定可能性もあります。

私はJacksonに慣れ親しんでいるので、JacksonがGsonよりも完全なサポートを持っていると思ういくつかの側面があります(Gsonの機能を見逃した場合はお詫び)。

  • 広範な注釈のサポート完全な継承、および高度な「ミックスイン」アノテーション(直接追加できない場合はアノテーションをクラスに関連付ける)を含みます。
  • 超高性能(またはメモリ制限)のユースケース用のストリーミング(増分)読み取り、書き込み。データバインディングと組み合わせることができます(サブツリーのバインド) - EDIT:最新バージョンのGsonにはストリーミングリーダーも含まれます
  • ツリーモデル(DOM風アクセス)さまざまなモデル間で変換できます(ツリー<-> Javaオブジェクト<->ストリーム)
  • デフォルトのコンストラクタだけでなく、任意のコンストラクタ(または静的ファクトリメソッド)を使用できます
  • フィールドおよびgetter/setterアクセス​​(以前のgsonバージョンはフィールドのみを使用しました。これは変更された可能性があります)
  • すぐに使えるJAX-RSサポート
  • 相互運用性:JAXBアノテーションも使用でき、一般的なパッケージ(joda、ibatis、cglib)、JVM言語(groovy、clojure、scala)のサポート/回避策があります。
  • 出力に対して静的(宣言)型処理を強制する機能
  • 多相型の逆シリアル化のサポート(Jackson 1.5) - Listのようなものを正しくシリアル化および逆シリアル化できる(追加の型情報付き)
  • バイナリコンテンツ(JSON文字列との間のbase64)の統合サポート
80
StaxMan

Gson 1.6には、低レベルのストリーミングAPIと、実際にはJacksonより速い新しいパーサーが含まれています。

36
inder

上記の他の回答に追加する。大文字と小文字を区別しないことがあなたにとって重要な場合は、Jacksonを使用してください。 Gsonはキー名の大文字と小文字の区別をサポートしませんが、jacksonはサポートします。

これが2つの関連リンクです。

(No)Gsonにおける大文字と小文字の区別のサポート: GSON:Jsonから大文字と小文字を区別しない要素を取得する方法?

ジャクソンにおける大文字と小文字の区別のサポート https://Gist.github.com/electrum/1260489

12
snegi

GSonはJAXBをサポートしていないようです。 JSONメッセージを作成または処理するためにJAXBアノテーション付きクラスを使用することで、Spring MVCを使用して同じクラスを共有してRestful Web Serviceインターフェースを作成できます。

6
raymond.mh.ng