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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:57:02