Appending value to a list depending on the JSON response

Question:

I’m calling an API and I get the following response:

"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
                        }
                    }
                ]

But sometimes the API also sends an answer like this:

"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
                        }
                    }

Now, what I’m trying to achieve is to append the "value" under the "referenceNumbers" when the "type" is equal to "OrderItemId".

Can anyone please point me out on the right direction to do it?

UPDATE: This is my current block of code:

 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'])
Asked By: Ricardo Tejada

||

Answers:

li = []
for resp in [response1, response2]:
    for i in resp['items'][0]['referenceNumbers']:
        if i['type'] == 'OrderItemId':
            li.append(i['value'])

li

Output:

['123456789', '987654321']
Answered By: Sergey Sakharovskiy

An answer with your code:

for i in data:
    if i["referenceNumbers"][0]["type"] == "OrderItemId":
        orders_reference_number.append(i["referenceNumbers"][0]["value"])
        orders_event_id.append(None)
        orders_item_id.append(i['skuNumber'])

    else:
        print("Not OrderItemId")
Answered By: María-Fernanda VL
Categories: questions Tags: , , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.