Python操作JSON:如何读取多层嵌套JSON结构中的指定字段值
读取嵌套结构ICMP JSON数据的解决方法
核心错误原因
- 缺少依赖导入:代码未导入
json库,无法执行JSON解析逻辑 - 变量命名冲突:
type是Python内置关键字,不可直接用作自定义变量存储ICMP类型值 - 键类型不匹配:JSON中所有键均为字符串格式(如
"03"、"00"),如果传入的ICMP类型、编码值为整数类型,无法匹配到对应键 - 语法逻辑错误:
data[type, code]实际是将元组(type, code)作为键查询,不符合嵌套字典的取值规则data[type[code]]是先从type变量中取下标为code的内容再查询,逻辑完全错误- 你尝试的
data[type][code]本身嵌套取值逻辑是对的,但受前面的命名冲突、键类型不匹配问题影响才运行失败
正确可运行代码
基础实现
import json # 使用with上下文管理器管理文件,自动处理文件关闭,避免资源泄漏 with open('icmp.json', 'r', encoding='utf-8') as f: data = json.load(f) # 注意键必须为字符串格式,避免使用内置关键字作为变量名 icmp_type = "03" icmp_code = "00" # 嵌套字典取值:先取外层键对应的内层字典,再取内层键对应的值 result = data[icmp_type][icmp_code] print(result)
运行后输出结果为:Destination Unreachable - Net Unreachable
兼容全场景实现
部分ICMP类型没有子编码(如"08"对应值为字符串而非字典),可以加判断做兼容:
import json with open('icmp.json', 'r', encoding='utf-8') as f: data = json.load(f) def get_icmp_prompt(icmp_type: str, icmp_code: str = None) -> str: type_content = data.get(icmp_type, "未知ICMP类型") # 如果当前类型对应值是字典,说明需要匹配子编码 if isinstance(type_content, dict): return type_content.get(icmp_code, "未知ICMP编码") return type_content # 调用示例 print(get_icmp_prompt("03", "00")) print(get_icmp_prompt("08"))
内容的提问来源于stack exchange,提问作者Pires
相关产品推荐
相关产品推荐

