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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:15:35