0

JSON を POJO に解析することと、JSON オーバーレイ オブジェクトを使用することの長所と短所について、人々はどう考えているのだろうか。

ユース ケース: Person JSON ドキュメントを返す REST 呼び出し。

例えば

[{"名前":"名前1"}, {"名前":"名前2}, ...]

解決策 1:

GSON、Jackson、JSONObject/JSONArray (手動) などを使用して、すべての着信 JSON を POJO に解析します。

結果:

class Person {

    String name;

    public String getName() {

        return name;
    }
}

解決策 2:

JSONObject アクセス メソッドを使用するオーバーレイ クラスを作成します。

結果:

class Person {

    JSONObject json;

    public String getName() {

        json.getString("name");
    }
}

特に、Android の限られたシステム リソースに関心があります。前もって解析コストを負担してより多くのメモリを使用したいですか、それとも ListView などのデータ アクセス中に解析コストを負担したいですか。

それは問題ですか?

4

1 に答える 1

0

私は通常、解決策 1 を好みます。

  1. 単一の非同期タスクとしてのダウンロードと解析は非常に簡単です。解析は、Web からのダウンロードに比べて非常に高速です。
  2. JSON データは、解析が完了した後にメモリから削除でき、その時点で必要なメモリは少なくなります。
  3. データへのアクセスは、ソリューション 2 よりも高速です。UI スレッドでデータを使用してListView.

ただし、ソリューション 2 の方が良い結果が得られるシナリオもあります。何千人もの人々がいる場合や、データが解析するよりも速く変化する場合などです。AListViewは現在表示されているデータのみを要求するため、解析は必要に応じてのみ実行され、非表示の項目に存在するデータの量から多かれ少なかれ独立します。

また、1 つのアイテムの解析に非常に時間がかかる場合は、ソリューション 2 をListViews. その場合、同じオブジェクトに対して常に解析を繰り返す必要がなくなるため、以下のようなものを使用します。

class Person {

    boolean parsed;
    String name;
    JSONObject json;

    public String getName() {
        if (!parsed) {
            name = json.getString("name");
            json = null;
            parsed = true;
        }
        return name;
    }
}
于 2012-08-25T00:00:13.290 に答える