JSON提取字段缺失求助:Python代码无法获取目标数据
修正Python提取订单JSON字段的代码
模拟的订单JSON结构
{ "orders": [ { "transaction_id": "hi9NAJ3prjwsHf2v8feSkNiZhp8YY", "line_items": [ { "name": "Bubble Tea", "modifiers": [ { "name": "Tapioca Pearls", "catalog_object_id": "D3JB47IY6ZMBSNNUCYRBVCP6", "quantity": "1" } ] } ] } ] }
原代码常见问题
字段提取失败通常是因为没处理JSON的多层嵌套,或者缺乏字段缺失的容错处理,比如原代码可能只遍历到line_items就停止,没有深入modifiers层级:
import json with open('orders.json', 'r') as f: data = json.load(f) for order in data['orders']: print(order['transaction_id']) # 无容错,字段缺失会直接报错 for item in order['line_items']: print(item['modifiers']) # 仅打印整个modifiers列表,未提取内部字段
修正后的代码
import json with open('orders.json', 'r') as f: data = json.load(f) # 遍历所有订单 for order in data.get('orders', []): # 提取transaction_id,字段缺失时返回None transaction_id = order.get('transaction_id') if transaction_id: print(f"交易ID: {transaction_id}") # 遍历当前订单的所有订单项 for line_item in order.get('line_items', []): # 遍历当前订单项的所有配料(modifiers) for modifier in line_item.get('modifiers', []): # 提取配料名称和catalog_object_id modifier_name = modifier.get('name') modifier_catalog_id = modifier.get('catalog_object_id') if modifier_name and modifier_catalog_id: print(f"配料名称: {modifier_name}, 配料ID: {modifier_catalog_id}")
关键优化点
- 使用
dict.get(key, default)替代直接索引:字段缺失时不会抛出KeyError,而是返回指定默认值(这里用空列表保证遍历正常执行) - 逐层遍历嵌套层级:
orders->line_items->modifiers,确保深入到目标字段所在层级 - 增加非空判断:避免打印无意义的
None值
内容的提问来源于stack exchange,提问作者Aiss
相关产品推荐
相关产品推荐

