我正在开发一个从 CSV 读取购买数据并为 API 有效负载输出 JSON 的项目。有多个具有相同订单 ID 的行,因为它们每个都有一个单独的项目,我想在创建购买有效负载之前将这些项目组合成一个数组。
order id name product_code purchase_price
012006251700-68811 item1 321618 1380
012006251700-68811 item1 321618 690
012006241026-13750 item2 329452 1490
012006221101-40527 item3 326353 1990
012006221101-40527 item4 321625 1490
012006192158-63823 item5 323098 1990
012006192158-63823 item6 320923 590
012006192158-63823 item7 325051 590
012006192158-63823 item8 325446 1990
我已经能够从 CSV 导入行,并且正在检查当前购买的 ID 值,但无法获得我想要的结果。
下面的代码应检查下一行的 ID 值是否相同,如果是,则仅将项目详细信息添加到项目数组中。
如果下一行没有相同的 ID,else 语句会将完整的购买添加到购买数组中。
import csv
import json
output = {'purchases': []}
items = {'items': []}
purchaseBody = {}
current_purchase = None
with open('tester - tester.csv') as csv_file:
for purchase in csv.DictReader(csv_file):
if current_purchase is not None and purchase['id'] == current_purchase['id']:
items['items'].append({'id': purchase['id'],
'name': purchase['name'],
'product_code': purchase['product_code']
'purchase_price': purchase['purchase_price'],
})
else:
purchaseBody = {
'id': purchase['id'],
'user': {'email': purchase['email']},
'total': purchase['total'],
'createdAt': purchase['createdAt']
}
items['items'].append({'id': purchase['id'],
'name': purchase['name'],
'product_code': purchase['product_code']
'purchase_price': purchase['purchase_price'],
})
output['purchases'].append(purchaseBody)
items = {'items': []}
purchaseBody.update(items)
current_purchase = purchase
with open('file.json', 'w') as jsonfile:
json.dump(output, jsonfile, ensure_ascii=False)
jsonfile.write('\n')
所需的输出应类似于以下内容:
{
"purchases": [{
"id": "purchase id",
"user": {
"email": "email"
},
"items": [{
"id": "id1",
"name": "name1",
"additionalFields": {
"product_code": "product_code1",
"purchase_price": "purchase_price1"
}
},
{
"id": "id2",
"name": "name2",
"additionalFields": {
"product_code": "product_code2",
"purchase_price": "purchase_price2"
}
}
],
"total": "total",
"createdAt": "createdAt"
}]
}