读取API返回的大量数据

杰德加德

我正在从一家公司提供的API中读取内容,但是问题是,我从中获取数据的一个帐户中大约有22000个json对象,它可以读取少量数据,我可以说最多8000条记录,但是然后我遇到了诸如json格式不正确的问题,除了能够读取响应的问题。

响应是这样发送的:

 <?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://ywers.com">
[{"Name":"Edward", "LastName":"Jones", "Address":"{accepted}"}
,{"Name":"Carlos",  "LastName":"Ramirez", "Address":"{Rejected}"}, ....... 22k more records here]</string>

我在这里早些时候寻求一些帮助,以寻求最佳方法来实现此目的,我得到了有关使用xml解析器然后使用json解析器读取它的响应,我正在使用GSON。

String XML = "<Your XML Response>";
XPathExpression xpath = XPathFactory.newInstance()
                         .newXPath().compile("/*[local-name()='string']");
String json = xpath.evaluate(new InputSource(new StringReader(XML)));

接着

JSONArray jsonRoot = new JSONArray(json.trim());
System.out.println(jsonRoot.getJSONObject(0).getString("Address")); // {accepted}

我所遇到的问题是我在读取XML时会引发错误,它开始读取,但过一会儿却由于诸如以下的错误而停止:

java.lang.OutOfMemoryError
at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractBuilder.java:94)
at java.lang.StringBuffer.append(StringBuffer.java:219)
at org.apache.harmony.xml.dom.CharacterDataImpl.appendData(CharacterDataImpl.java:43)
......

我将不胜感激有关如何进行此操作的任何建议,我是android的新手。

尼科·阿德里安斯·尤沃诺(Niko Adrianus Yuwono)

我不知道是谁将22k对象包装在xml字符串中,但是显然有人在这样做。根据我的经验,您的内存不足是因为您尝试将所有响应都转换为字符串,但是响应太大而无法处理。我建议您流式传输JSON数据。您可以从HTTP帖子获得的inputstream响应中流传输JSON数据,但是您需要通过从原始响应输入流中创建另一个输入流来跳过XML部分,并跳过XML部分

在我使用Google GSON的流API之前,我还遇到了OOM错误,因为我得到的JSON数据非常大(许多图像和声音以Base64编码),但是使用GSON流,我可以克服该错误,因为它不读取每个令牌的数据一次全部。另外,您也可以使用Jackson JSON库,我认为它也具有流API,以及如何将其与Google GSON的实现方式几乎一样使用。希望我的回答能对您有所帮助,如果您对我的回答还有其他疑问,请随时在评论中提问:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

高效读取大量数据

来自分类Dev

Python Twisted在API上返回了大量但未知的数据

来自分类Dev

Golang从管道中读取大量数据

来自分类Dev

从csv读取行中存储的大量数据

来自分类Dev

您如何组织/读取大量数据?

来自分类Dev

直接从文件中读取大量bmp数据

来自分类Dev

从csv读取行中存储的大量数据

来自分类Dev

从具有大量数据包的 NetworkStream 异步读取数据

来自分类Dev

HBase读取数据返回null

来自分类Dev

如何读取返回的流数据

来自分类Dev

读取从asp.net Web API返回的任意数据集数据

来自分类Dev

YouTube数据API查询大量增加

来自分类Dev

BigCommerce PHP API-提取大量数据

来自分类Dev

反应如何从 api 中获取大量数据

来自分类Dev

多次从具有大量数据的Java InputStream中读取

来自分类Dev

如何通过读取CSV文件来保留大量数据

来自分类Dev

如何将大量数据作为惰性数组读取

来自分类Dev

FORTRAN:存储可在MATLAB中读取的大量数据的最佳方法

来自分类Dev

PID 0为什么读取/写入大量数据

来自分类Dev

读取大量文本文件并存储数据 - Javascript

来自分类Dev

从rest api返回数据

来自分类Dev

React - 从 API 返回数据

来自分类Dev

无法读取API响应数据

来自分类Dev

fscanf读取以空格分隔的数据,直到返回

来自分类Dev

如何读取 PDFsharp 返回的 UTF 元数据?

来自分类Dev

“同时”读取大量文件

来自分类Dev

读取jsonp api调用返回的json对象

来自分类Dev

如何返回Web API数据

来自分类Dev

从ServiceStack API逐步返回数据