Python 字典嵌套 JSON 字符串的正确解析与遍历方法

2次阅读

Python 字典嵌套 JSON 字符串的正确解析与遍历方法

本文详解如何处理从文件读取的、内部值为 json 字符串形式的 python 字典结构,重点解决因误将字符串当作容器直接索引而导致的访问错误,并通过 json.loads() 安全转换与遍历嵌套数据。

本文详解如何处理从文件读取的、内部值为 json 字符串形式的 python 字典结构,重点解决因误将字符串当作容器直接索引而导致的访问错误,并通过 json.loads() 安全转换与遍历嵌套数据。

在实际数据处理中(尤其是从配置文件、API 响应或日志中读取时),常会遇到一种“伪嵌套”结构:外层是合法的 Python 字典,但其值字段并非原生数据类型,而是被双重包裹的 JSON 字符串——即字符串内容本身是 JSON 格式(如 ‘[{“Day”:”Monday”,…}]’)。这种结构看似可迭代,实则无法直接用列表或字典语法访问深层字段,因为 Python 将其识别为普通字符串,而非数据结构

以典型问题为例:

data = {"test": ['[{"Day":"Monday","Device":"Android","Data":[1, 2, 3]}, {"Day":"Tuesday","Device":"Iphone","Data":[10, 20, 30]}]']}

此处 data[“test”] 是一个长度为 1 的列表,其唯一元素 data[“test”][0] 是一个字符串,而非列表或字典。因此执行 value1[0] 得到的是该字符串的第一个字符 ‘[‘,而非第一个 JSON 对象——这正是困惑的根源。

✅ 正确做法是:先提取字符串,再用 json.loads() 解析为原生 Python 对象

立即学习Python免费学习笔记(深入)”;

import json  # 提取并解析嵌套的 JSON 字符串 json_str = data["test"][0]  # 类型: str parsed_list = json.loads(json_str)  # 类型: list of dict  # 现在可安全遍历 for item in parsed_list:     print(f"Day: {item['Day']}, Device: {item['Device']}, Data: {item['Data']}")     # 输出:     # Day: Monday, Device: Android, Data: [1, 2, 3]     # Day: Tuesday, Device: Iphone, Data: [10, 20, 30]

⚠️ 关键注意事项:

  • 切勿跳过 json.loads() 直接索引字符串:value1[0] 是取字符串首字符,不是取 JSON 数组首元素;
  • 确保字符串格式合法:若 JSON 格式错误(如引号不匹配、尾逗号等),json.loads() 会抛出 json.JSONDecodeError,建议添加异常处理;
  • 警惕注入风险:仅对可信来源的字符串使用 json.loads();绝对不要用 eval() 替代,后者存在严重安全漏洞;
  • 注意数据类型一致性:json.loads() 将 JSON NULL 转为 None,true/false 转为 True/False,数字保持 int/Float,符合预期。

? 进阶提示:若原始结构更复杂(如多层嵌套字符串),可封装递归解析函数;对于高频解析场景,建议在数据加载阶段(如 json.load() 读取文件时)就完成结构标准化,避免后续重复解析。

总之,识别“字符串化的 JSON”并主动解析,是处理此类混合数据结构的核心原则。掌握这一模式,可显著提升解析鲁棒性与代码可维护性。

text=ZqhQzanResources