[英]Convert Nested Json file to CSV file in Python
我有一個嵌套的 Json 文件,我正在嘗試將其轉換為 CSV 文件。
Json 數據如下所示:
{
"businessUnitId": 999999,
"lastPollTime": "2021-04-12T18:30:48.703Z",
"totalRecords": 2,
"dispositions": [
{
"dispositionId": 1000,
"dispositionName": "Reservation_Test",
"isActive": true,
"skills": [
{
"skillId": 1,
"mediaTypeId": 3,
"mediaTypeName": "Chat"
},
{
"skillId": 2,
"mediaTypeId": 3,
"mediaTypeName": "Chat"
},
{
"skillId": 3,
"mediaTypeId": 3,
"mediaTypeName": "Chat"
}
]
},
{
"dispositionId": 1001,
"dispositionName": "Cancel Reservation",
"isActive": true,
"skills": [
{
"skillId": 4,
"mediaTypeId": 3,
"mediaTypeName": "Chat"
},
{
"skillId": 5,
"mediaTypeId": 3,
"mediaTypeName": "Chat"
},
{
"skillId": 6,
"mediaTypeId": 3,
"mediaTypeName": "Chat"
},
{
"skillId": 7,
"mediaTypeId": 3,
"mediaTypeName": "Chat"
},
{
"skillId": 8,
"mediaTypeId": 4,
"mediaTypeName": "Phone Call"
},
{
"skillId": 9,
"mediaTypeId": 4,
"mediaTypeName": "Phone Call"
},
{
"skillId": 10,
"mediaTypeId": 4,
"mediaTypeName": "Phone Call"
},
{
"skillId": 11,
"mediaTypeId": 4,
"mediaTypeName": "Phone Call"
}
}
]
}
這是我的代碼:
import json
import csv
# Opening JSON file and loading the data
# into the variable data
with open('File.json') as json_file:
data = json.load(json_file)
dispositions = data['dispositions']
# now we will open a file for writing
data_file = open('File.csv', 'w')
# create the csv writer object
csv_writer = csv.writer(data_file)
# Counter variable used for writing
# headers to the CSV file
count = 0
for emp in dispositions:
if count == 0:
# Writing headers of CSV file
header = emp.keys()
csv_writer.writerow(header)
count += 1
# Writing data of CSV file
csv_writer.writerow(emp.values())
data_file.close()
當我運行代碼時,這就是我得到的:
dispositionName isActive 技能 Reservation_Test TRUE [{'skillId': 1, 'mediaTypeId': 3, 'mediaTypeName': 'Chat'}, {'skillId': 2, 'mediaTypeId': 3, 'mediaTypeName': 'Chat'}, {'skillId': 3, 'mediaTypeId': 3, 'mediaTypeName': 'Chat'}] 取消預訂 TRUE [{'skillId':4, 'mediaTypeId': 3, 'mediaTypeName': 'Chat'}, {' SkillId':5,'mediaTypeId':3,'mediaTypeName':'Chat'},{'skillId':6,'mediaTypeId':3,'mediaTypeName':'Chat'},{'skillId':7,' mediaTypeId': 3, 'mediaTypeName': 'Chat'}, {'skillId': 8, 'mediaTypeId': 4, 'mediaTypeName': '電話'}, {'skillId': 10647567, 'mediaTypeId': 4, 'mediaTypeName':'電話'},{'skillId':10647574,'mediaTypeId':4,'mediaTypeName':'電話'},{'skillId':10647599,'mediaTypeId':4,'mediaTypeName': '電話'}]
這就是我要的:
dispositionId dispositionName isActive SkillId mediaTypeId mediaTypeName
1000 Reservation_Test TRUE 1 3 Chat
1000 Reservation_Test TRUE 2 3 Chat
1000 Reservation_Test TRUE 3 3 Chat
1001 Cancel Reservation TRUE 4 3 Chat
1001 Cancel Reservation TRUE 5 3 Chat
1001 Cancel Reservation TRUE 6 3 Chat
1001 Cancel Reservation TRUE 7 3 Chat
1001 Cancel Reservation TRUE 8 4 Phone Call
1001 Cancel Reservation TRUE 9 4 Phone Call
1001 Cancel Reservation TRUE 10 4 Phone Call
1001 Cancel Reservation TRUE 11 4 Phone Call
我只是不確定如何處理嵌套的 JSON 數據。
謝謝
您需要為重復的內容創建一個嵌套循環。 我還建議使用內置的csv.DictWriter
而不是常規的csv.writer
class。
data_file = open('File.csv', 'w')
# Use the first obj to determine the header row
header = [x for x in dispositions[0].keys() if x != "skills"]
header.extend(dispositions[0]["skills"][0].keys())
csv_writer = csv.DictWriter(data_file, fieldnames=header)
csv_writer.write(header)
for emp in dispositions:
# These key/values are common to each nested row
common_fields = {
k: v for k, v in emp.items() if k != "skills"
}
for skill in emp["skills"]:
# Combine the common fields with this skill's key/values
row = {**common_fields, **skill}
csv_writer.write(row)
data_file.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.