JSON中以数字开头的对象属性调用失败,求解决方法
API天气数据调用解决方案
首先,你提供的API返回数据结构如下(简化版):
{ "current": { ... }, "forecast": { "2019-09-07": { "astro": { "sunrise": "06:28 AM", "sunset": "07:19 PM" }, "sunhour": 10.3 } } }
针对你调用{forecast["2019-09-07"].astro.sunrise}失败的问题,以下是不同场景下的可行调用方法:
1. JavaScript环境
如果是在JS中处理数据,可采用:
- 基础方括号+点语法(本身是正确写法,若失败需检查数据是否解析完成):
const sunrise = forecast["2019-09-07"].astro.sunrise; const sunset = forecast["2019-09-07"].astro.sunset; const sunhour = forecast["2019-09-07"].sunhour;
- 可选链操作符避免层级缺失报错:
const targetDate = "2019-09-07"; const sunrise = forecast?.[targetDate]?.astro?.sunrise; const sunset = forecast?.[targetDate]?.astro?.sunset; const sunhour = forecast?.[targetDate]?.sunhour;
2. 模板引擎场景(如Handlebars、Jinja2)
部分模板引擎对带连字符的键支持有限,可尝试:
- Handlebars 使用
lookup辅助函数:
{{lookup (lookup (lookup forecast "2019-09-07") "astro") "sunrise"}} {{lookup (lookup (lookup forecast "2019-09-07") "astro") "sunset"}} {{lookup forecast "2019-09-07" "sunhour"}}
- 预处理数据(推荐):先提取目标日期的子对象再传入模板:
// 前端预处理 const dailyForecast = forecast["2019-09-07"]; // 模板中直接调用 {{dailyForecast.astro.sunrise}} {{dailyForecast.astro.sunset}} {{dailyForecast.sunhour}}
3. Python环境
若用Python处理API返回的字典:
# 假设data是解析后的JSON字典 target_date = "2019-09-07" sunrise = data["forecast"][target_date]["astro"]["sunrise"] sunset = data["forecast"][target_date]["astro"]["sunset"] sunhour = data["forecast"][target_date]["sunhour"] # 用get方法避免KeyError sunrise = data.get("forecast", {}).get(target_date, {}).get("astro", {}).get("sunrise")
常见失败原因排查
- 数据未解析:确保API返回的JSON字符串已转换为对应语言的对象/字典,而非原始文本。
- 键名不匹配:检查
"2019-09-07"与forecast中的日期键完全一致(包括格式、符号)。 - 数据缺失:确认API请求参数正确,返回的forecast中确实包含目标日期的完整数据。
内容的提问来源于stack exchange,提问作者Mayowa
相关产品推荐
相关产品推荐

