ограничить размер json в методе post в java - PullRequest
0 голосов
/ 31 мая 2018

У меня очень большой массив строк json, и я хочу отправить HTTP-запрос, который принимает не более 5 МБ данных за один почтовый вызов или рассматривает 1000 записей (приблизительно) для каждого вызова.

JSON:

Items:[
    {"Name" : "Chair",
     "price" : "30"},
    {"Name" : "Table",
    "price" : "40"},
    {"Name" : "laptop",
    "price" : "300"},
    ... 
]

Фрагмент Java:

public static void main(String args[]) throws Exception{
    URL url = new URL("http://example.com");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setConnectTimeout(5000);//5 secs
    connection.setReadTimeout(5000);//5 secs

    connection.setRequestMethod("POST");
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "application/json");

    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());  
    out.write("json object");
    out.flush();
    out.close();
}

Сейчас я отправляю все массивы json одновременно. Может ли кто-нибудь помочь мне ограничить массив json, чтобы каждый раз я мог отправлять 1000 записей (приблизительно) сразу как партия.

1 Ответ

0 голосов
/ 31 мая 2018

Попробуйте,

int batch_size = 1000;
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonObj, JsonObject.class);
JsonArray array = jsonObject.getAsJsonArray("items");
int numberOfBatches = array.size() / batch_size;
for(int i = 0; i <= numberOfBatches; i++) {
  JsonArray currentBatch = new JsonArray();
  for(int j = 0; (j < batch_size || j < array.size()); j++) {
    currentBatch.add(array.get((i * batch_size) + j));
  }
  //Your POST code
  JsonObject objtoSend = new JsonObject();
  objtoSend.add("items", currentBatch);
  out.write(gson.toJson(objtoSend));
  ...
}

Он использует библиотеку Gson для сериализации и десериализации данных.

...