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