
本文详解如何在 python 中使用 for 循环安全、高效地遍历 json 解析后的字典(dict)结构,动态输出所有键名与对应值,避免硬编码索引,提升代码可维护性与健壮性。
本文详解如何在 python 中使用 for 循环安全、高效地遍历 json 解析后的字典(dict)结构,动态输出所有键名与对应值,避免硬编码索引,提升代码可维护性与健壮性。
在 Python 中,JSON 数据经 json.loads() 或 json.load() 解析后,会自动转换为原生的字典(dict)或列表(list)对象。因此,处理 JSON 的核心其实是掌握 Python 中字典和嵌套数据结构的遍历方法。用户常误用 for d in d1[0]:(仅遍历键名),导致无法获取值;正确做法是使用 .items() 方法同时迭代键与值。
✅ 正确遍历 JSON 字典的推荐写法
假设你已将 JSON 字符串解析为 Python 对象:
import json
# 示例 JSON 字符串(模拟 API 响应或文件内容)
json_str = '''[
{
"ack": 20,
"total": 156,
"status": "success",
"timestamp": "2024-03-15T08:22:10Z"
}
]'''
d1 = json.loads(json_str) # → list of dict要打印 d1[0](即第一个对象)中所有字段的键值对,应使用:
for key, value in d1[0].items():
print(f"{key}: {value}")输出结果:
立即学习“Python免费学习笔记(深入)”;
ack: 20 total: 156 status: success timestamp: 2024-03-15T08:22:10Z
? 为什么 for d in d1[0] 不够用?
# ❌ 错误示范:只遍历键(key),无法直接访问值
for d in d1[0]:
print(f"{d}: ?") # 输出:ack: ?,total: ? … 但 value 未知该写法等价于 for key in d1[0].keys():,仅获得键名,若需值还需额外写 d1[0][key],冗余且易出错(如键不存在时抛 KeyError)。
?️ 进阶建议:增强鲁棒性与可读性
-
检查数据结构安全性(避免 IndexError 或 KeyError):
if d1 and isinstance(d1, list) and len(d1) > 0 and isinstance(d1[0], dict): for key, value in d1[0].items(): print(f"{key}: {value}") else: print("无效的 JSON 数据格式:期望非空字典列表") -
支持嵌套 JSON(递归打印)(可选扩展):
def print_dict_recursive(d, indent=0): for key, value in d.items(): if isinstance(value, dict): print(" " * indent + f"{key}:") print_dict_recursive(value, indent + 1) else: print(" " * indent + f"{key}: {value}") # 使用示例 # print_dict_recursive(d1[0])
✅ 总结
- JSON 在 Python 中即 dict/list,无需特殊“JSON 循环语法”,只需用标准字典方法;
- 遍历键值对请始终优先使用 .items();
- 生产环境务必校验数据存在性与类型,防止运行时异常;
- 理解 dict.keys()、dict.values() 和 dict.items() 的区别,是高效处理 JSON 的基础能力。
掌握这一模式后,你不仅能轻松打印 JSON 内容,还可进一步实现字段过滤、类型转换、生成报告等实用功能。











