2009-12-30 14 views
6

所以我有這個JSON,然後我的活動中檢索到的字符串:解析JSON成一個ListView友好的輸出

{"popular": 
     {"authors_last_month": [ 
     { 
      "url":"http://activeden.net/user/OXYLUS", 
      "item":"OXYLUS", 
      "sales":"1148", 
      "image":"http://s3.envato.com/files/15599.jpg" 
     }, 
     { 
      "url":"http://activeden.net/user/digitalscience", 
      "item":"digitalscience", 
      "sales":"681", 
      "image":"http://s3.envato.com/files/232005.jpg" 
     } 
     { 
      ... 
     } 
     ], 
     "items_last_week": [ 
     { 
      "cost":"4.00", 
      "thumbnail":"http://s3.envato.com/files/227943.jpg", 
      "url":"http://activeden.net/item/christmas-decoration-balls/75682", 
      "sales":"43", 
      "item":"Christmas Decoration Balls", 
      "rating":"3", 
      "id":"75682" 
     }, 
     { 
      "cost":"30.00", 
      "thumbnail":"http://s3.envato.com/files/226221.jpg", 
      "url":"http://activeden.net/item/xml-flip-book-as3/63869", 
      "sales":"27", 
      "item":"XML Flip Book/AS3", 
      "rating":"5", 
      "id":"63869" 
     }, 
     { 
      ... 
     }], 
     "items_last_three_months": [ 
     { 
      "cost":"5.00", 
      "thumbnail":"http://s3.envato.com/files/195638.jpg", 
      "url":"http://activeden.net/item/image-logo-shiner-effect/55085", 
      "sales":"641", 
      "item":"image logo shiner effect", 
      "rating":"5", 
      "id":"55085" 
     }, 
     { 
      "cost":"15.00", 
      "thumbnail":"http://s3.envato.com/files/180749.png", 
      "url":"http://activeden.net/item/banner-rotator-with-auto-delay-time/22243", 
      "sales":"533", 
      "item":"BANNER ROTATOR with Auto Delay Time", 
      "rating":"5", 
      "id":"22243"}, 
     { 
      ... 
     }] 
    } 
} 

可以訪問here爲好,儘管它,因爲它是一個相當長的字符串,我已將上述內容修剪至顯示所需內容。

基本上,我希望能夠訪問「items_last_week」中的項目並創建它們的列表 - 最初我的計劃是在其左側的「項目」左側具有「縮略圖」,但是從今天玩了SDK,看起來太難或不可能實現這一點,所以我只會從列表中的'items_last_week'擁有'item'數據而感到高興。

來自php我很努力地使用任何可用於Java的JSON庫,因爲它似乎遠不止一行代碼,我需要反序列化(我認爲這是正確的詞) JSON,他們都似乎需要某種形式的額外的類,除了JSONArray/JSONObject腳本我不喜歡這樣一個事實,即items_last_week嵌套(再次,我認爲這是JSON術語),並需要一個可怕的長期有時間在Android模擬器上運行。

所以,實際上,我需要一個(最好是簡單的)方式將items_last_week數據傳遞給ListView。我知道我需要一個自定義適配器,我可能會把我的頭轉過來,但我無法理解,無論我花了多少時間試圖找出它,如何訪問JSON字符串的某些部分..

+0

你需要Json幫助嗎?然後你可以添加Json標籤到你的問題。 – tbruyelle 2009-12-30 22:19:18

+0

「java」標籤也是適合的。 – 2009-12-30 23:31:28

回答

9

原本我的計劃是對左側與 「項目」的 「縮略圖」旁邊,但是從今天的SDK打 圍繞它出現 太困難或不可能實現 這個

這遠非不可能,但它會是單調乏味的,除非y你可以使用something that already wraps up that pattern(並且希望這是合理的「正確」)。在網絡上,性能/帶寬問題是用戶的問題 - 在移動領域,它們是您的問題。

,因爲它似乎是比 行的代碼,我將需要 反序列化得多(我認爲這是正確的 字)的JSON

new JSONObject(data)是一行代碼。現在,取得 JSON,我認爲你是從前面提到的URL做的,會有幾行代碼。 JSON的解析以及從互聯網上獲取它對於Android來說都是獨一無二的 - 所有這些在桌面Java應用程序或Java servlet或者其他上看起來都是一樣的。

除了JSONArray/JSONObject的 腳本我有不喜歡 事實items_last_week嵌套

我還沒有JSON解析與像你的文件展品結構的問題。而且,這對於Android來說並不是獨一無二的--JSON解析器用於許多其他基於Java的項目。

,並採取一個可怕的很長一段時間對 Android模擬器

運行模擬器的速度與您的開發機器的速度。對我來說,仿真器通常比實際的電話硬件慢......而我的臺式機是四核的。請記住,仿真器假裝成在您的PC上運行的ARM芯片組,將ARM操作碼轉換爲x86操作碼,因此速度不會很快,並且不會很好地利用多個內核。

所以,實際上,我需要一個(優選 簡單)的方式向 items_last_week數據傳遞到ListView。

Android沒有真正構建到採用任意JSON結構和任意數據,並直接將其倒入ListView。這不是JSON的獨特之處 - XML會表現出類似的現象。

你的選擇是:

  1. 創建一個自定義ListAdapter一個包裝解析JSON。
  2. 將解析的JSON轉換爲MatrixCursor(考慮2D數組數據)並使用SimpleCursorAdapter
  3. 將解析的JSON轉換爲ArrayList<String>並使用ArrayAdapter

就短期而言,選項#3可能是最簡單的。

我明白我需要一個定製 適配器,我大概可以繞讓我 頭,但我不明白, 不管多少天我 剛花想弄清楚的, 如何訪問JSON 字符串的某些部分..

而這個問題在幫助方面太模糊了。您可能會考慮打開一個單獨的問題,標記爲Java和JSON,您將詳細瞭解json.org解析器出現問題的詳細信息。

+0

OP的問題非常好的細分。簡潔以及逐個部分的回答/分析。 – 2012-01-19 17:34:17

1

我其實只是回答了這個問題。檢查一下自定義適配器處理JSON的非常簡單的代碼。

JSONAdapter