簡體   English   中英

Android:解析大型JSON文件

[英]Android: Parsing large JSON file

我正在創建一個Android應用程序,該應用程序應將Json從文件或url解析為jsonarray和jsonobjects。 問題是我的json為3.3 mb,當我使用簡單的代碼時,如下所示:(由於我在工作,因此從教程中復制了一些代碼,現在無法訪問我的真實代碼;因此其中可能有一些錯誤)

(假設我已經有我的輸入流內容)

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時出現OutOfMemory錯誤。 我記錄了一些東西,發現我的總字符串為17 mb(一個3.3 mb的json文件?!),當我使用一個小的json文件(例如twitterfeed左右)時,代碼可以正常工作。 當我的內存中有這個17 mb的字符串時,我無法解析json,因為那樣我會耗盡內存。

經過大量研究,我發現傑克遜可能是我的解決方案,因為我知道可以解析輸入流。 這應該有所幫助,因為比起我,我的內存中不需要17 mb的字符串; 但這不是我猜出的最有效的方法。...但是我無法弄清楚這確實可行,也沒有讓它自己運行。 有誰知道這確實可行,在哪里可以找到教程?

我找到了“ createJsonParser-public JsonParser createJsonParser(InputStream in)”,並認為這是我要走的路...但是我不知道如何在我的代碼中實現它,並且找不到示例。 有誰知道這是如何工作的?

您應該通過gson或jackson使用json流。 使用Jackson,您也可以使用混合方法。 這將大大減少您的內存消耗,因為僅將解析的json部分加載到內存中。

https://sites.google.com/site/gson/gson-user-guide http://jackson.codehaus.org/

傑克遜示例http://www.mkyong.com/java/jackson-streaming-api-to-read-and-write-json/

與Jackson的混合流式傳輸方法是一個不錯的選擇。 這樣,您可以通過原始JSON輸入前進一個指針(在運行時對其進行驗證),並且當您檢測到需要處理的輸入塊時,可以將其讀入樹形層次結構,以便可以提取任何您想要的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM