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
相关产品推荐
相关产品推荐

