2012-08-24 59 views
0

我想知道大家怎麼看JSON解析JSON到POJO與使用JSON覆蓋對象的PROS/CONS。Android解析JSON vs JSON覆蓋

用例:返回Person JSON文檔的REST調用。

例如

[{ 「名稱」: 「NAME1」},{ 「名稱」:「NAME2},...]

解決方案1:

解析所有傳入的JSON成使用GSON,傑克遜POJO的的JSONObject/JSONArray(手動)等

結果:

class Person { 

    String name; 

    public String getName() { 

     return name; 
    } 
} 

解決方案2:

創建overla y類使用JSONObject訪問方法。

結果:

class Person { 

    JSONObject json; 

    public String getName() { 

     json.getString("name"); 
    } 
} 

特別是,我很感興趣,在Android系統有限的ressources方面。我是否想要提前解析成本,並使用更多內存,還是希望在數據訪問期間(例如在ListView中)產生解析成本?

重要嗎?

回答

0

我通常喜歡解決方法1.

  1. 下載和解析爲一個異步任務是非常簡單的。與從網上下載相比,解析速度應該很快。
  2. 解析完成後,JSON數據可以從內存中刪除,並且所需的內存在此時較低。
  3. 訪問數據比解決方案2更快 - 如果您想要在UI線程中將快速訪問用於更新ListView中的項目。

但有些情況下解決方案2應該產生更好的結果。就像有成千上萬的人一樣,或者數據的變化速度比解析速度快。 A ListView只請求當前可見的數據,因此解析只能按需完成,並且會與不可見項目存在的數據量或多或少無關。

如果解析單個項目需要很長時間,解決方案2還可以與異步方法一起使用,如與ListView一起使用的異步圖像加載器。在這種情況下,我會使用類似於下面的東西,因爲這樣可以防止對同一個對象始終重複進行解析。

class Person { 

    boolean parsed; 
    String name; 
    JSONObject json; 

    public String getName() { 
     if (!parsed) { 
      name = json.getString("name"); 
      json = null; 
      parsed = true; 
     } 
     return name; 
    } 
}