code: @Restricted(NoExternalUse.class)
      public static String loadJSON(URL src) throws IOException {
          URLConnection con = ProxyConfiguration.open(src);
          if (con instanceof HttpURLConnection) {
              // prevent problems from misbehaving plugins disabling redirects by default
              ((HttpURLConnection) con).setInstanceFollowRedirects(true);
          }
          try (InputStream is = con.getInputStream()) {
              String jsonp = IOUtils.toString(is, "UTF-8");
              int start = jsonp.indexOf('{');
              int end = jsonp.lastIndexOf('}');
              if (start >= 0 && end > start) {
                  return jsonp.substring(start, end + 1);
              } else {
                  throw new IOException("Could not find JSON in " + src);
              }
          }
      }
docs: Loads JSON from a JSONP URL.
  Metadata for downloadables and update centers is offered in two formats, both designed for download from the browser (predating {@link DownloadSettings}):
  HTML using {@code postMessage} for newer browsers, and JSONP as a fallback.
  Confusingly, the JSONP files are given the {@code *.json} file extension, when they are really JavaScript and should be {@code *.js}.
  This method extracts the JSON from a JSONP URL, since that is what we actually want when we download from the server.
  (Currently the true JSON is not published separately, and extracting from the {@code *.json.html} is more work.)
  @param src a URL to a JSONP file (typically including {@code id} and {@code version} query parameters)
  @return the embedded JSON text
  @throws IOException if either downloading or processing failed