JSONObject在Android中被截断

时间:2012-11-02 12:31:04

标签: android json salesforce

我的应用程序正在尝试连接到Salesforce API并下拉其中存在的所有联系人。响应json对象有一个名为“totalSize”的键,表示33231条记录。当我尝试以JSONArray的形式访问记录时,我的JSONArray只包含2000条记录。某处jsonobject可能会被截断。你能帮忙吗?以下是我的代码。

JSONObject asJSONObject = new JSONObject(new JSONTokener(result));
int totalRecordsSize = Integer.parseInt(asJSONObject.getString("totalSize"));
System.out.println("JSON_RESULT_SIZE : "+totalRecordsSize);
JSONArray array = (JSONArray)asJSONObject.get("records");
int count = array.length();
System.out.println("JSON_ARRAY_SIZE : "+count);

由于

2 个答案:

答案 0 :(得分:2)

salesforce服务器以2000个行块的形式发送结果,响应结构的一部分是nextRecordsUrl,其中包含下一页结果的URL,您需要对其进行GET以获取下一组结果记录等等,直到您获取整个结果集。

答案 1 :(得分:0)

通常在配置服务器(可能默认情况下)响应Web调用响应有限数量的数据时会出现此类问题。例如,如果您使用 ASP.NET webservice,则默认的Json响应长度限制为 100kb 。但是,您可以通过简单地增加web.config中的响应长度来覆盖此限制:

<system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="5242880"/>  <!-- 5MB -->
      </webServices>
      <scriptResourceHandler enableCompression="true" enableCaching="true" />
    </scripting>
</system.web.extensions>

使用上面的配置,我的json响应将达到5MB,但请确保在处理大量数据时也增加HTTP连接超时值。例如:

HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 60000);  //1 minute
HttpConnectionParams.setSoTimeout(httpParams, 60000);          //1 minute
HttpClient client = new DefaultHttpClient(httpParams);