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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:24:57