You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing中JSON GET请求报错求助:无法创建HTTP阅读器

解决Processing中OpenWeatherMap API的JSON读取错误及提取风速字段问题

嘿,我之前也碰到过类似的坑,咱们一步步来排查解决:

首先,那个"Couldn't create a reader"错误大概率是请求协议问题或者服务器返回非有效JSON导致的,先从最常见的原因入手:

1. 把HTTP改成HTTPS(最可能的解决方法)

现在OpenWeatherMap已经强制要求用HTTPS访问API了,你原来的URL用的是http://,这会直接导致请求被拒绝或返回非JSON内容,把URL开头改成https://试试,这一步解决了我90%的类似问题。

2. 用带异常捕获的代码排查问题

Processing的loadJSONObject报错信息太模糊,咱们加个try-catch块,同时打印服务器返回的原始内容,就能精准定位问题(比如密钥失效、参数错误等)。

下面是完整的可运行代码示例:

String apiKey = "f77c39703fb6be71e2c5a96e58edc077";
float targetLat = 35;
float targetLon = 139;
// 重点:使用HTTPS协议
String apiUrl = "https://api.openweathermap.org/data/2.5/weather?lat=" + targetLat + "&lon=" + targetLon + "&APPID=" + apiKey;

void setup() {
  size(400, 200);
  smooth();
  
  try {
    // 加载API返回的JSON对象
    JSONObject weatherResponse = loadJSONObject(apiUrl);
    
    // 提取风速:风速嵌套在"wind"子对象的"speed"字段中
    JSONObject windData = weatherResponse.getJSONObject("wind");
    float windSpeed = windData.getFloat("speed");
    
    // 打印结果,也可以在画布上显示
    println("当前风速:" + windSpeed + " m/s");
    textSize(20);
    text("Wind Speed: " + windSpeed + " m/s", 20, 50);
  } catch (Exception e) {
    // 打印错误详情
    println("出错了:" + e.getMessage());
    // 打印服务器原始响应,方便排查问题
    String rawResponse = loadStrings(apiUrl).join("\n");
    println("服务器原始响应:\n" + rawResponse);
  }
}

3. 额外排查步骤

如果改了HTTPS还是不行,试试这几点:

  • 验证API密钥有效性:登录OpenWeatherMap后台,确认你的密钥已激活(新创建的密钥可能需要5-10分钟生效),且没超过调用次数限制。
  • 检查网络权限:确保电脑防火墙没拦截Processing的网络请求,或者切换到手机热点试试,排除本地网络问题。
  • 浏览器直接测试URL:把修改后的HTTPS URL复制到浏览器打开,如果返回正常JSON,说明API参数没问题,问题出在Processing的代码或网络设置;如果浏览器返回错误(比如"Invalid API key"),先解决密钥问题。

按这个流程走,应该就能顺利提取到风速字段了!

内容的提问来源于stack exchange,提问作者Niels Vanwingh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:49:25