0

我的应用程序正在尝试连接到 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);

谢谢

4

2 回答 2

2

Salesforce 服务器以 2000 行块发送结果,响应结构的一部分是nextRecordsUrl包含指向下一页结果的 URL,您需要对其执行 GET 以获取下一组记录,依此类推,直到您获取您的整个结果集。

于 2012-11-02T15:27:59.537 回答
0

通常,当您的服务器配置为(可能是默认情况下)响应有限数量的数据以响应网络调用时,就会出现此类问题。例如,如果您使用的是ASP.NET Web 服务,则默认 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);
于 2012-11-02T12:36:40.173 回答