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

如何从API返回的JSON中提取OrderItemId对应的value并追加到列表

问题

调用某API获取JSON响应,响应包含items数组,每个item对象的referenceNumbers字段是一个数组,其中每个元素包含type和value属性。我需要将type为OrderItemId对应的value值追加到列表中。当前代码直接通过item['referenceNumbers']['value']取值会报错,求正确实现方向。

API响应示例1

"items": [
    {
        "packagingType": "PCS",
        "description": "[REDACTED]",
        "productCode": "MATT",
        "freightClass": "300",
        "insuranceValue": 428.70999999971326,
        "primaryReferenceNumber": null,
        "poNumber": "[REDACTED]",
        "skuNumber": "[REDACTED]",
        "pluNumber": null,
        "actualQuantity": 1,
        "actualWeight": 125,
        "actualWeightUnitOfMeasure": "Pounds",
        "actualPallets": 1,
        "actualVolume": null,
        "actualVolumeUnitOfMeasure": "Cubic Feet",
        "actualPackagingLength": null,
        "actualPackagingHeight": null,
        "actualPackagingWidth": null,
        "actualPackagingUnitOfMeasure": "Inches",
        "referenceNumbers": [
            {
                "type": "CustomerItemIdentifier1",
                "value": "[REDACTED]"
            },
            {
                "type": "OrderItemId",
                "value": "123456789"
            },
            {
                "type": "SHID",
                "value": "[REDACTED]"
            }
        ],
        "associatedStop": {
            "pickSequenceNumber": null,
            "dropSequenceNumber": null
        }
    }
]

API响应示例2

"items": [
    {
        "packagingType": "PCS",
        "description": "[REDACTED]",
        "productCode": "MISC",
        "freightClass": "300",
        "insuranceValue": 2500,
        "primaryReferenceNumber": null,
        "poNumber": "[REDACTED]",
        "skuNumber": "[REDACTED]",
        "pluNumber": null,
        "actualQuantity": 1,
        "actualWeight": 132,
        "actualWeightUnitOfMeasure": "Pounds",
        "actualPallets": null,
        "actualVolume": null,
        "actualVolumeUnitOfMeasure": "Cubic Feet",
        "actualPackagingLength": null,
        "actualPackagingHeight": null,
        "actualPackagingWidth": null,
        "actualPackagingUnitOfMeasure": "Inches",
        "referenceNumbers": [
            {
                "type": "OrderItemId",
                "value": "987654321"
            }
        ],
        "associatedStop": {
            "pickSequenceNumber": null,
            "dropSequenceNumber": null
        }
    }
]

现有代码

for object in parsed['results']:
    if  object['event']['eventType'] in event_list:
        for item in object['event']['items']:
            orders_event_name.append(object['event']['eventType'])
            orders_customer_order.append(object['billToReferenceNumber'])
            orders_reference_number.append(item['referenceNumbers']['value'])
            orders_event_id.append(None)
            orders_item_id.append(item['skuNumber'])
            orders_datetime_started.append(object['eventTime'])
            orders_seconds.append(None)
            orders_load_number.append(object['event']['loadNumber'])

解决方案

报错核心原因是item['referenceNumbers']是数组类型,不是单个对象,无法直接通过['value']取值。需要遍历该数组,筛选出type为OrderItemId的元素后再提取value。

基础修改版本

for object in parsed['results']:
    if  object['event']['eventType'] in event_list:
        for item in object['event']['items']:
            orders_event_name.append(object['event']['eventType'])
            orders_customer_order.append(object['billToReferenceNumber'])
            
            # 遍历referenceNumbers数组,匹配目标类型
            order_item_id = None
            for ref in item['referenceNumbers']:
                if ref['type'] == 'OrderItemId':
                    order_item_id = ref['value']
                    break
            
            orders_reference_number.append(order_item_id)
            orders_event_id.append(None)
            orders_item_id.append(item['skuNumber'])
            orders_datetime_started.append(object['eventTime'])
            orders_seconds.append(None)
            orders_load_number.append(object['event']['loadNumber'])

简洁优化版本(生成器表达式)

如果业务上能保证每个item必定包含OrderItemId类型的元素,可直接用:

order_item_id = next(ref['value'] for ref in item['referenceNumbers'] if ref['type'] == 'OrderItemId')

如果存在没有OrderItemId的情况,需添加默认值避免报错:

order_item_id = next((ref['value'] for ref in item['referenceNumbers'] if ref['type'] == 'OrderItemId'), None)

将上述代码替换原有orders_reference_number.append(item['referenceNumbers']['value'])这一行即可。

内容的提问来源于stack exchange,提问作者holyshilo111

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:40:43