当前位置: 首页 > 知识库问答 >
问题:

Android:解析大型JSON文件

马航
2023-03-14

我正在创建一个android应用程序,它应该解析一个Json从一个文件或url到一个json数组和json对象。问题是我的json是3.3mb,当我使用一个简单的代码时,就像这样:(不能访问我的真实代码,因为我在工作,从html" target="_blank">教程中复制了一些代码;所以可能会有一些错误)

(假设我已经有了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时,会出现OutOfMemory错误。我记录了一些东西,我发现我的总字符串是17MB(在一个3.3MB的json文件中?!)当我使用一个小的json文件时,比如twitterfeed之类,代码运行良好。当我的内存中有这个17MB的字符串时,我无法解析json,因为这样我的内存就用完了。

经过大量研究,我发现jackson可能是我的解决方案,因为我知道解析输入流是可能的。这应该会有帮助,因为我不需要内存中的17MB字符串;这不是我最有效的方式。。。。但我不能弄清楚这真的会起作用,而且我自己也没有让它运行。有人知道这是真的会工作,我在哪里可以找到一个教程?

我找到了“createJsonParser——公共JsonParser createJsonParser(InputStream in)”,并认为这是我的方法。。。但我不知道如何在代码中实现这一点,也找不到示例。有人知道这是怎么回事吗?

共有2个答案

穆浩皛
2023-03-14

Jackson的混合流方法是一个很好的选择。这样,您可以通过原始JSON输入推进一个指针(边走边验证),当您检测到需要处理的输入块时,您可以将其读入树状层次结构,以便您可以从中提取任何您想要的数据。

公西浩
2023-03-14

您应该将json流媒体与gson或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/

 类似资料:
  • 问题内容: 我正在创建一个Android应用程序,该应用程序应将Json从文件或URL解析为jsonarray和jsonobjects。问题是我的json是3.3 mb,当我使用一个简单的代码时,是这样的:(现在无法访问我的真实代码,因为我正在工作,从教程中复制了一些代码;因此其中可能有一些错误) (假设我已经有我的输入流内容) 当我在Android设备上运行此代码时,将字符串解析为jsonArr

  • 问题内容: 我正在研究可访问API的cron脚本,可接收JSON文件(大量对象)并将其存储在本地。完成后,另一个脚本需要解析下载的JSON文件,并将每个对象插入MySQL数据库。 我目前正在使用和。这将尝试在尝试处理之前将整个文件读入内存。除了我的JSON文件通常在250MB-1GB +之间的事实之外,这将很好。我知道我可以增加我的PHP内存限制,但这在我看来似乎并不是最大的答案。我知道我可以运行

  • 问题内容: 我有一个文件,该文件以JSON形式存储许多JavaScript对象,我需要读取该文件,创建每个对象并对其进行处理(以我为例将其插入到db中)。JavaScript对象可以表示为以下格式: 格式A: 或 格式B: 请注意,表示很多JSON对象。我知道我可以将整个文件读入内存,然后像这样使用: 但是,该文件可能确实很大,我更喜欢使用流来完成此操作。我在流中看到的问题是,文件内容随时可能被分

  • 我有一个文件,它以JSON形式存储了许多JavaScript对象,我需要读取该文件,创建每个对象,并对它们做一些事情(在我的例子中,将它们插入数据库)。JavaScript对象可以用一种格式表示: 格式A: 或格式B: 请注意,

  • 我想使用Typescript解析/处理一个25 MB的JSON文件,并过滤/排序对象。。我写的代码花了几分钟(有时会超时),不确定为什么会发生这种情况,或者是否有其他方法可以提高代码的效率。 注意:代码在一个小文件上工作

  • 我在尝试向手机显示JSON数据时遇到了这个问题 这是我的错误消息 9-29 11:28:24.657 29264-29264/com . example . window 8 . my friend D/Android runtime:正在关闭虚拟机09-29 11:28:24.657 29264-29264/com . example . window 8 . my friend W/dalvi