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

Python解析API返回JSON字典时元素显示为字符串类型如何解决

问题修复方案

报错根因

  • 你的代码中for data in Data['name']的逻辑不符合实际返回结构:接口返回的Data['name']本身就是字典类型,直接遍历字典只会返回它的键(都是字符串类型),你尝试对字符串调用.values()方法自然会触发属性不存在的报错。
  • 原有逻辑还存在遍历字典时直接删除键的风险,可能因为遍历过程中字典长度变化引发异常,且只处理了name字段的空值,扩展性差。

修复后代码

import requests

def clean_data():
    r = requests.get('https://coderbyte.com/api/challenges/json/json-cleaning')
    data = r.json()
    # 收集name字段下所有值为空的键,避免遍历字典时直接修改引发异常
    empty_keys = [key for key, val in data['name'].items() if val == '']
    for key in empty_keys:
        del data['name'][key]
    return data

print(clean_data())

运行验证

上述代码运行后输出结果和你预期的完全一致:
{'name': {'first': 'Robert', 'last': 'Smith'}, 'age': 25, 'DOB': '-', 'hobbies': ['running', 'coding', '-'], 'education': {'highschool': 'N/A', 'college': 'Yale'}}

通用扩展方案(可选)

如果你需要处理整个JSON结构中所有层级的空值,可以使用递归函数实现,适配任意嵌套的字典、列表结构:

def clean_all_empty(obj):
    if isinstance(obj, dict):
        return {k: clean_all_empty(v) for k, v in obj.items() if v != ''}
    elif isinstance(obj, list):
        return [clean_all_empty(item) for item in obj if item != '']
    else:
        return obj

调用时只需要把data = r.json()改成data = clean_all_empty(r.json())即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:54:07