Jas*_*per 0 parsing android json jackson
我正在创建一个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"));
Run Code Online (Sandbox Code Playgroud)
当我在我的Android设备上运行此代码时,我将字符串解析为jsonArray时出现OutOfMemory错误.我记录了一些东西,我发现我的总字符串是17 MB(一个3.3 MB的json文件?!)当我使用一个小的json文件,如twitterfeed左右,代码工作正常.当我在我的内存中得到这个17 MB的字符串时,我无法解析json,因为那时我的内存耗尽了.
经过大量的研究,我发现杰克逊可能是我的解决方案,因为我知道可以解析输入流.这应该有帮助,因为我不需要记忆中的17 mb字符串; 这不是我认为最有效的方式......但是我无法明白这一点真的会起作用,并且没有让它自己运行.有谁知道这真的会起作用,我在哪里可以找到一个教程?
我找到了"createJsonParser - public JsonParser createJsonParser(InputStream in)"并认为这是我的方式......但我不知道如何在我的代码中实现这一点,并且找不到示例.有谁知道这是如何工作的?
你应该使用json流媒体或者gson或者jackson.有了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/
| 归档时间: |
|
| 查看次数: |
11774 次 |
| 最近记录: |