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

Yahoo天气API预报解析报错求助:JSONObject调用问题

解决Yahoo天气API获取预报数据的报错问题

嘿,我来帮你排查下代码里的问题~你现在的报错主要是两个原因:

问题1:字段拼写错误

你代码里写的是getJSONArray("forcast"),但Yahoo Weather API里的预报数组字段名是**forecast**(多了一个字母e),拼写不对肯定会找不到对应的数组,直接抛出异常。

问题2:JSON层级没找对

你直接从最外层的jobj2里找数组,但实际上预报数据嵌套在好几层对象里。从你给出的API响应片段来看,完整的层级是:
query → results → channel → item → forecast

修正后的代码示例

我给你调整了代码,按照正确的层级解析,同时修正了拼写:

// 假设response是你拿到的API响应字符串
JSONObject jobj2 = new JSONObject(response);

// 逐层解析嵌套的JSON对象
JSONObject queryObj = jobj2.getJSONObject("query");
JSONObject resultsObj = queryObj.getJSONObject("results");
JSONObject channelObj = resultsObj.getJSONObject("channel");
JSONObject itemObj = channelObj.getJSONObject("item");

// 这里用正确的字段名"forecast"获取数组
JSONArray forecastArray = itemObj.getJSONArray("forecast");

// 遍历数组处理每个预报项
for (int i = 0; i < forecastArray.length(); i++) {
    JSONObject dailyForecast = forecastArray.getJSONObject(i);
    // 示例:获取日期、最高温、最低温
    String date = dailyForecast.getString("date");
    String highTemp = dailyForecast.getString("high");
    String lowTemp = dailyForecast.getString("low");
    
    // 这里可以根据你的需求处理其他字段,比如天气描述、风向等
}

额外小建议

如果担心某些字段可能不存在导致报错,可以先判断字段是否存在:

if (itemObj.has("forecast")) {
    JSONArray forecastArray = itemObj.getJSONArray("forecast");
    // 后续遍历逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:40:28