Python提取JSON的name与value字段输出异常问题排查
代码问题排查
原代码存在3个核心问题,导致输出不符合预期:
- 仅提取了
value字段,完全没有读取同层级的name字段,无法生成一一对应的键值对结构 - 异常捕获逻辑和代码缩进存在问题:
print(got)写在try...except块外部,一旦某条数据触发KeyError,got变量会保留上一轮循环的旧值,造成数据重复、遗漏,你当前输出缺失最后一条Prop 65声明就是这个原因导致的 - 直接使用裸
except:会吞掉所有类型的异常,出现非预期问题时完全无法定位报错原因
正确实现代码
如果只需要提取PKG&HAZMAT分组下的name-value配对,使用以下代码即可:
# 读取目标分组数据 pkg_hazmat_list = temp['specifications']['PKG&HAZMAT'] result = {} for item in pkg_hazmat_list: # 提前校验字段存在,避免KeyError if 'name' in item and 'value' in item: result[item['name']] = item['value'] # 结构化输出结果 for field_name, field_value in result.items(): print(f"{field_name}: {field_value}")
如果需要提取specifications下所有分组(包含MARKETING、PROP65、FP_PartType_F552等)的字段配对,增加一层外层循环即可:
spec_groups = temp['specifications'] result = {} for group, item_list in spec_groups.items(): for item in item_list: if 'name' in item and 'value' in item: result[item['name']] = item['value'] print(result)
预期输出效果
针对PKG&HAZMAT分组的完整输出如下,无数据遗漏:
VMRS: FLETP Sales Unit: EA Quantity per Application: 0 Height Each: 5.8 Width Each: 20.35 Length Each: 18.95 Weight Each: 14.47 Prop 65 Statement: WARNING Cancer and Reproductive Harm - www.P65Warnings.ca.gov
优化说明
- 移除了不规范的裸异常捕获,改用字段存在性校验,不会吞掉非预期报错,也不会出现变量残留导致的脏数据问题
- 同时读取
name和value字段,直接生成标准字典结构,满足结构化提取要求 - 代码缩进统一,逻辑分层清晰,后续新增提取规则时修改成本低
内容的提问来源于stack exchange,提问作者Amen Aziz
相关产品推荐
相关产品推荐

