2012-06-19 108 views
0

我正在創建一個Android應用程序,該應用程序應該將Json從文件或網址解析爲jsonarray和jsonobjects。 問題是,我的JSON是3.3 MB,當我使用一個簡單的代碼,如下所示:(現在不能訪問我的真實代碼,因爲我在工作,從教程中複製了一些代碼;所以它可能會有一些錯誤)Android:解析大型JSON文件

(假設我已經有我的InputStream內容)

InputStream content = entity.getContent(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        builder.append(line); 
String twitterfeed = builder.toString(); 
} 

JSONArray jsonArray = new JSONArray(twittefeed); 
      Log.i(ParseJSON.class.getName(), 
        "Number of entries " + jsonArray.length()); 
      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 
       Log.i(ParseJSON.class.getName(), jsonObject.getString("text")); 

運行我的Android設備上的代碼,我解析字符串到jsonArray時得到一個內存不足錯誤。 我記錄了一些事情,我發現我的總字符串是17 MB(的3.3 MB的JSON文件?!)當我使用一個小的JSON文件,如twitterfeed左右,代碼工作正常。 當我在記憶中得到這個17 MB的字符串時,我無法解析JSON,因爲那時我的內存不足。

經過大量研究,我發現傑克遜可能是我的解決方案,因爲我明白可以解析輸入流。這應該有所幫助,因爲我的記憶中不需要17 MB的字符串;這不是我認爲的最有效的方式....但我無法清楚地知道這真的會起作用,並沒有讓它自己運行。 有誰知道這是真的會工作,並在哪裏我可以找到一個教程?

我發現"createJsonParser -- public JsonParser createJsonParser(InputStream in)"並認爲這是我的方式去...但我不知道如何在我的代碼中實現這一點,並找不到示例。有誰知道這是如何工作的?

+0

試試看這裏:http://stackoverflow.com/questions/9390368/java-best-approach-to-parse-huge-extra-large-json-file –

回答

0

hybrid streaming approach與傑克遜是一個好的選擇。這樣,您可以通過原始JSON輸入提前指示一個指針(隨時對其進行驗證),並且當您檢測到需要處理的輸入塊時,可以將其讀入樹形層次結構中,以便您可以將任何你想要的數據。