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

Python中TypeError报错原因及JSON数据优化访问方案问询

问题原因解析

从你给出的JSON片段能直接明确问题根源:

  • resp.json()["data"] 是字典对象,因此可以通过字符串键(如"metrics")访问对应值
  • 但"metrics"对应的是列表(数组),而非字典,所以不能用字符串"basal_energy_burned"作为索引,必须使用整数索引(比如[0]、[1])来获取列表中的元素
  • 列表里的每个元素又是字典对象,所以取到元素后(例如metrics[1]),又能通过字符串键(如"data")访问内部数据
不依赖数字索引的访问方案

直接遍历metrics列表,通过name字段匹配目标数据,这样就算列表元素的顺序发生变化,也不会影响结果。

方案1:基础循环遍历

metrics = resp.json()["data"]["metrics"]
target_metric = None
# 遍历列表找匹配项
for item in metrics:
    if item["name"] == "basal_energy_burned":
        target_metric = item
        break

# 处理找到的数据
if target_metric:
    basal_energy_data = target_metric["data"]
    # 这里可以添加你的数据处理逻辑
else:
    print("未找到basal_energy_burned指标")

方案2:列表推导式简化写法

如果只需快速过滤出目标项,用列表推导式更简洁:

metrics = resp.json()["data"]["metrics"]
# 过滤出name匹配的项
basal_energy_items = [item for item in metrics if item["name"] == "basal_energy_burned"]
# 取第一个匹配项(假设name字段唯一)
if basal_energy_items:
    basal_energy_data = basal_energy_items[0]["data"]
else:
    print("未找到目标指标")

方案3:封装工具函数(便于复用)

如果需要多次按name查找指标,可以封装成函数:

def get_metric_by_name(metrics_list, target_name):
    for metric in metrics_list:
        # 用get避免键不存在报错
        if metric.get("name") == target_name:
            return metric
    return None

# 使用示例
metrics = resp.json()["data"]["metrics"]
basal_metric = get_metric_by_name(metrics, "basal_energy_burned")
if basal_metric:
    print(basal_metric["data"])
else:
    print("目标指标不存在")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:42:37