【问题标题】:FOR Loop for JSON and JAVA [closed]JSON 和 JAVA 的 FOR 循环 [关闭]
【发布时间】:2020-02-02 02:03:31
【问题描述】:

我有以下包含 JSON 的 POST API 代码。 JSON 中有一个 URL 提及为“https://nike.com” 我希望一次又一次地调用相同的 API,但要使用不同的 URL。我一直在通过调用这些 API 来截取提到的 URL 网页,所以我需要添加不同的 URL。 有没有办法一次添加两个或多个 URL,例如使用 for 循环或其他方法?

OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n  \"url\": \"https://www.nike.com\",\r\n  \"defer_time\": 5,\r\n  \"email\": true,\r\n  \"mac_res\": \"1024x768\",\r\n  \"win_res\": \"1366X768\",\r\n  \"smart_scroll\": true,\r\n  \"layout\": \"portrait\",\r\n  \"configs\": {\r\n    \"windows 10\": {\r\n      \"chrome\": [\r\n        \"76\",\r\n        \"75\",\r\n        \"74\"\r\n\r\n      ],\r\n      \"firefox\": [\r\n        \"67\",\r\n        \"66\"\r\n      ],\r\n      \"opera\": [\r\n        \"58\",\r\n        \"57\"\r\n      ],\r\n      \"ie\": [\r\n        \"11\"\r\n      ]\r\n    },\r\n    \"macos mojave\": {\r\n      \"chrome\": [\r\n        \"76\",\r\n        \"75\"\r\n      ],\r\n      \"firefox\": [\r\n        \"67\",\r\n        \"66\"\r\n      ],\r\n      \"opera\": [\r\n        \"58\",\r\n        \"57\"\r\n      ],\r\n      \"safari\": [\r\n        \"12\"\r\n      ]\r\n    },\r\n    \"ios 12.0\": {\r\n      \"devices\": [\r\n        \"iphone xr\",\r\n        \"iphone xs\",\r\n        \"iphone xs max\"\r\n      ]\r\n    },\r\n    \"android 9.0\": {\r\n      \"devices\": [\r\n        \"galaxy s9 plus\"\r\n      ]\r\n    }\r\n  }\r\n}");
Request request = new Request.Builder()
  .url("https://api.lambdatest.com/screenshots/v1/")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Basic cmFtaXRkbGFtYmRhdGVzdDpBTIzdWprdFdhU3VCUnE5ak9qSW52QmFlbGlleUMwMFhhdlpVUA==")
  .addHeader("Accept", "*/*")
  .addHeader("Cache-Control", "no-cache")
  .addHeader("Host", "api.lambdatest.com")
  .addHeader("Accept-Encoding", "gzip, deflate")
  .addHeader("Connection", "keep-alive")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

任何帮助将不胜感激。

【问题讨论】:

标签: java json loops


【解决方案1】:

您可以尝试在单独的方法中提取用于发出请求的所有代码,其中正文中的 url 是一个变量和一个方法参数。如果你把你需要的 url 放在一个数组中,你可以循环遍历数组并使用不同的 url 作为参数调用方法。

【讨论】:

  • 我对 JSON 完全陌生,你能帮忙举个例子吗?
【解决方案2】:

也许您可以尝试将代码块放入方法中。

 public void jsonCall(String url, String body) {
    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, String.format("{\r\n  \"url\": \"%s\",\r\n  \"defer_time\": 5,\r\n  \"email\": true,\r\n  \"mac_res\": \"1024x768\",\r\n  \"win_res\": \"1366X768\",\r\n  \"smart_scroll\": true,\r\n  \"layout\": \"portrait\",\r\n  \"configs\": {\r\n    \"windows 10\": {\r\n      \"chrome\": [\r\n        \"76\",\r\n        \"75\",\r\n        \"74\"\r\n\r\n      ],\r\n      \"firefox\": [\r\n        \"67\",\r\n        \"66\"\r\n      ],\r\n      \"opera\": [\r\n        \"58\",\r\n        \"57\"\r\n      ],\r\n      \"ie\": [\r\n        \"11\"\r\n      ]\r\n    },\r\n    \"macos mojave\": {\r\n      \"chrome\": [\r\n        \"76\",\r\n        \"75\"\r\n      ],\r\n      \"firefox\": [\r\n        \"67\",\r\n        \"66\"\r\n      ],\r\n      \"opera\": [\r\n        \"58\",\r\n        \"57\"\r\n      ],\r\n      \"safari\": [\r\n        \"12\"\r\n      ]\r\n    },\r\n    \"ios 12.0\": {\r\n      \"devices\": [\r\n        \"iphone xr\",\r\n        \"iphone xs\",\r\n        \"iphone xs max\"\r\n      ]\r\n    },\r\n    \"android 9.0\": {\r\n      \"devices\": [\r\n        \"galaxy s9 plus\"\r\n      ]\r\n    }\r\n  }\r\n}", body));
    Request request = new Request.Builder()
            .url(url)
            .post(body)
            .addHeader("Content-Type", "application/json")
            .addHeader("Authorization", "Basic cmFtaXRkbGFtYmRhdGVzdDpBTIzdWprdFdhU3VCUnE5ak9qSW52QmFlbGlleUMwMFhhdlpVUA==")
            .addHeader("Accept", "*/*")
            .addHeader("Cache-Control", "no-cache")
            .addHeader("Host", "api.lambdatest.com")
            .addHeader("Accept-Encoding", "gzip, deflate")
            .addHeader("Connection", "keep-alive")
            .addHeader("cache-control", "no-cache")
            .build();

    Response response = client.newCall(request).execute();
}

public void callJson() {
    Map<String, String> urlAndBody = new HashMap<>();
    urlAndBody.put("https://api.lambdatest.com/screenshots/v1/", "https://www.nike.com");
    urlAndBody.put("https://api.lambdatest1.com/screenshots/v1/", "https://www.puma.com");
    urlAndBody.put("https://api.lambdatest2.com/screenshots/v1/", "https://www.adidas.com");
    // put more url body pair here

    urlAndBody.forEach((url, body) -> {
        this.jsonCall(url, body);
    });
}

用参数 url 替换那个 url。并根据需要多次调用此函数。每次只给不同的url?

【讨论】:

  • 我对 JSON 完全陌生,你能帮忙举个例子吗?
  • 更新了代码块,是你要找的东西吗?
  • 感谢代码,但我不是在寻找迭代 API 端点 URL。我在询问在 JSON 对象 "nike.com" 中输入的 URL。您可以在 RequestBody 中看到该 URL
  • 又更新了,希望是你要的
  • 还是不行。编译器将 %s 作为 URL,而不是将 URL 存储在其中并要求输入有效的 URL。
猜你喜欢
  • 2021-02-20
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 2022-06-10
  • 2014-12-05
相关资源
最近更新 更多