0

アプリケーションがSalesforceAPIに接続し、そこに存在するすべての連絡先をプルダウンしようとしています。応答jsonオブジェクトには、33231レコードを示す「totalSize」というキーがあります。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

通常、このような問題は、Web 呼び出しに応答して限られた量のデータを応答するようにサーバーが構成されている場合に (おそらくデフォルトで) 発生します。たとえば、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 に答える