【发布时间】:2013-08-20 03:32:30
【问题描述】:
我正在从一家公司提供的 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 有点陌生。
【问题讨论】:
-
找到用 XML 封装了 22k 元素的 JSON 数组的人(并且作为奖励在 一个元素中),然后射击他们。你会很难处理的。
-
应提供范围查询API。
-
我知道...多么痛苦...
-
同意@BrianRoach。设计 Api 的人应该实现索引和限制。即使您没有收到 OutOfMemoryError,您也会遇到问题。
-
在这种情况下,是否可以使用正则表达式来解析属性,因为这里的json结构很简单。