JSON:ジャクソン ストリーム パーサー - 本当にそれだけの価値がありますか?[閉まっている]
質問
私は作成中のアプリで JSON 解析をかなり頻繁に利用しています。私が行ったことのほとんどは、Android の組み込み JSONObject ライブラリ (json-lib ですか?) を使用してすでに実装されています。
JSONObject は、JSON 文字列内のすべてのインスタンスを作成するように見えます...たとえすべてを使い果たさなかったとしても。
私のアプリは現在、G1 上でもかなりうまく動作します。
私の質問は次のとおりです。Jackson のようなストリーム パーサーを使用することによる速度とメモリの利点には、苦労する価値がありますか?
トラブルとは、次のことを意味します。私の知る限り、組み込みライブラリの代わりに Jackson を使用することには 3 つの欠点があります。
- 外部ライブラリへの依存。これにより、最終的に .apk が大きくなります。大したことではありません。
- あなたのアプリはさらに脆弱です。解析は自動的に行われないため、解析中の JSON テキストの変更に対してより脆弱になります (おそらくこれについては私が間違っています)。
- ストリーム パーサーを介して JSON を解析するコードを記述するのは見苦しく、退屈です。
解決
あなたはかなりあなた自身の質問に答えました推測。 :)
自分JSONパーサーを内蔵し、代替を探したことがありません。
EDIT:今、私は DroidPartsするから薄いのアノテーションベースのラッパーを使用しています。
他のヒント
私はまた、ほとんどの場合、ビルドでJSONパーサーを使用して、最近では収まらないシナリオに足を踏み入れています:私は以上1メガバイトのJSON文書を受け取り、いくつかのWebサービス要求のために。ビルドでJSONパーサーでこれらをロードすると、メインメモリの膨大な量を必要とし、OutOfMemoryException
数倍になりました。これらのシナリオの場合はストリーミングパーサーは(それが使用中のより不便であっても)より良い選択であり、ビルトインJSONパーサーはストリーミングが、唯一のDOMのようなスタイルを提供していません。
Android向けストリーミングJSONパーサを探している人のために私は強く GoogleのGSON を使用することをお勧めすることができます。私が最初にジャクソンJSONを試みたと私は私のアプリのリリースバージョンを構築しようとしたまでそれがうまく働いた:ProGuardのは、いくつかの問題を報告し、すべてがデバッグで正常に働いていたのに実行しているアプリは(ジャクソンのNullPointerException
のコンストラクタで神秘的なObjectMapper
で墜落しました版)。でも、周りにしようとして数時間後、私はこの問題を解決することができませんでした。私はその後、その後GSONに切り替え、すべてが魅力のように働きました。
ところで:。GSONストリーミングのみのjarファイルのみ14KBの大きさがある - そう何も本当に心配することを
私は質問が内蔵された1が十分であるかどうかだと思います。それがある場合は、必ず、依存関係を最小限に抑えることが、多くの場合、良い戦略です。グッドは十分な効率性と使いやすさの両方を参照することができます。
何が価値があるために、ジャクソンはまた、まともなツリーモデルを持っているだけでなく、完全なデータバインディング。 ツリーモデルは、デフォルトのパーサよりも大幅に高速です(構文解析は、Androidのような他のプラットフォーム上で、おそらく同様に、3倍、5倍高速化J2SE上で、ツリーモデル自体は、おそらくより効率的に同様です)。 または:あなたは(マッパーがツリーモデルとデータバインディングのために必要とされている)は、第2の瓶に依存したくない場合は、お使いのユースケースをカバーするために、独自のツリーを書くことは、あまりにも簡単です。いずれかの基本的なHashMapの/のArrayList /ラッパーを使用するか、またはあなたが好む場合は、独自のクラスを持っています。 Builderは、コードトップの多分40行になります。