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

如何安全获取嵌套JSON值并填充缺失值?解决类型报错

问题诊断与解决方案

错误原因分析

  1. objects是数组而非字典:API返回的objects是列表类型,你直接对APResponseJSON.get('objects', {})调用.get('data'),当objects存在时得到的是列表(无get()方法);若objects不存在,默认值设为字符串'field_52',字符串同样没有get()方法,这就是报错的核心原因。
  2. Role字段语法完全错误:你错误混用列表索引与字典get方法,['objects'][0]实际是取字符串'objects',对字符串调用.get()必然报错。
  3. 硬索引无容错机制:APResponseJSON['objects'][0]['data']['field_6']['value']这种写法,只要任意一层键/索引缺失,就会直接抛出KeyError或IndexError。

修正后的代码

import requests
import json

APResponse = requests.post(APurl, headers=headers, json={'offset': str(AssetPandaCurrentUser), 'limit': '1'})
APResponseJSON = json.loads(APResponse.text)

# 安全获取第一个object,不存在则返回空字典
first_object = APResponseJSON.get('objects', [{}])[0]
# 从object中获取data节点,不存在则返回空字典
data = first_object.get('data', {})

AssetPandaUserDict = {
    "Username": data.get('field_52', ''),  # 取不到值时返回空字符串
    "Role": data.get('field_49', {}).get('value', ''),  # 逐层嵌套get,避免类型错误
    "User Status": data.get('field_6', {}).get('value', ''),
    "Laptop Status": [],
    "Laptop Serial": []
}

关键优化点

  • 安全处理列表元素:用APResponseJSON.get('objects', [{}])[0],即便objects为空或不存在,也能得到空字典,避免索引报错。
  • 链式get加类型匹配默认值:每一层调用.get()时,默认值设为对应类型(字典用{}, 字符串用''),确保后续调用不会因类型不兼容报错。
  • 移除不必要的列表包裹:按照你的期望结果,直接取值而非将结果放入列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:10:36