15

私が書いているアプリでは、JSON 解析をかなり多用しています。私が行ったことのほとんどは、Android の組み込み JSONObject ライブラリ (json-lib ですか?) を使用して既に実装されています。

JSONObject は、JSON 文字列内の絶対にすべてのインスタンスを作成するように見えます...それらのすべてを使用しなくても。

私のアプリは現在、G1 でもかなりうまく動作します。

私の質問は次のとおりです。Jackson のようなストリーム パーサーを使用することによる速度とメモリの利点は、すべての問題に値するものですか?

困ったことに、私はこれを意味します:私が知る限り、組み込みライブラリの代わりにJacksonを使用することには3つの欠点があります:

  1. 外部ライブラリへの依存。これにより、最終的に .apk が大きくなります。大したことではありません。
  2. あなたのアプリはより脆弱です。解析は自動的に行われないため、解析している JSON テキストの変更に対してより脆弱です (おそらく、これについては間違っています)。
  3. ストリーム パーサーを介して JSON を解析するコードを記述するのは、見苦しく退屈です。
4

3 に答える 3

6

ほとんどの場合、ビルトインの JSON パーサーも使用していますが、最近、それが適合しないシナリオに足を踏み入れました。一部の Web サービス要求では、1 MB を超える JSON ドキュメントを受け取ります。組み込みの JSON パーサーでこれらをロードすると、膨大な量のメイン メモリが必要になり、OutOfMemoryException数回の結果になりました。これらのシナリオでは、ストリーミング パーサーがより適切な選択であり (使用には不便ですが)、組み込みの JSON パーサーはストリーミングを提供せず、DOM のようなスタイルのみを提供します。

Android 用のストリーミング JSON パーサーを探している人には、Google の GSONを使用することを強くお勧めします。最初に Jackson JSON を試してみましたが、アプリのリリース バージョンをビルドするまでは問題なく動作していました。ProGuard はいくつかの問題を報告し、実行中のアプリNullPointerExceptionは Jackson のコンストラクターで不可解なエラーでクラッシュしましたObjectMapper(ただし、デバッグ バージョンではすべて正常に動作しました)。 . 数時間試行錯誤した後でも、これを修正できませんでした。その後、GSONに切り替えたところ、すべてが魅力的に機能しました。

ところで: GSON ストリーミング専用の jar のサイズは 14kB しかないため、特に心配する必要はありません。

于 2011-06-17T09:54:27.137 に答える
2

あなた自身の質問にほとんど答えたと思います。:)
組み込みの JSON パーサーを自分で使用しており、代替手段を探したことはありません。

編集:今、私はDroidPartsの薄い注釈ベースのラッパーを使用しています。

于 2010-03-18T03:45:47.627 に答える
2

問題はビルトインで良いかどうかだと思います。そうであれば、依存関係を最小限に抑えることは、多くの場合、優れた戦略です。十分であるとは、効率と使いやすさの両方を指す場合があります。

価値のあることとして、Jackson は適切なツリー モデルと完全なデータ バインディングも備えています。ツリー モデルはデフォルトのパーサーよりも大幅に高速です (解析は J2SE で 3 倍から 5 倍速く、おそらく Android などの他のプラットフォームでも同様であり、ツリー モデル自体もおそらくより効率的です)。または: 2 番目の jar に依存したくない場合 (ツリー モデルとデータ バインディングにはマッパーが必要です)、ユース ケースをカバーする独自のツリーを作成するのも簡単です。基本的な HashMap/ArrayList/wrappers を使用するか、必要に応じて独自のクラスを作成してください。Builder はおそらく 40 行のコードです。

于 2010-03-22T17:03:08.943 に答える