我正在尝试将一个很长的JSON文件转换为CSV。我目前正在尝试使用下面的代码来实现这一点。
import json
import csv
with open('G:userjsondata.json') as json_file:
jsondata = json.load(json_file)
data_file = open('G:userjsonoutput.csv', 'w', newline='')
csv_writer = csv.writer(data_file)
count = 0
for data in jsondata:
if count == 0:
header = data.keys()
csv_writer.writerow(header)
count += 1
csv_writer.writerow(data.values())
data_file.close()
这段代码完成了将所有数据写入CSV,但只从第一行JSON中获取的键用作CSV中的头。这很好,但在JSON中还有更多的键要使用。这导致价值观杂乱无章。我想知道是否有人能帮我找到一种方法来获得所有可能的标题,并可能在一行不包含该键或该键的值时插入NA。
JSON文件类似于以下内容:
[
{"time": "1984-11-04:4:00", "dateOfevent": "1984-11-04", "action": "TAKEN", "Country": "Germany", "Purchased": "YES", ...},
{"time": "1984-10-04:4:00", "dateOfevent": "1984-10-04", "action": "NOTTAKEN", "Country": "Germany", "Purchased": "NO", ...},
{"type": "A4", "time": "1984-11-04:4:00", "dateOfevent": "1984-11-04", "Country": "Germany", "typeOfevent": "H7", ...},
{...},
{...},
]
我到处寻找可能的解决方案,但找不到有类似问题的人。
如果想使用csv和json模块来完成这项工作,那么可以分两步完成。第一次收集CSV文件的密钥,第二次将行写入CSV文件。此外,必须使用DictWriter,因为不同记录中的键不同。
import json
import csv
with open('jsondata.json') as json_file:
jsondata = json.load(json_file)
# stage 1 - populate column names from JSON
keys = []
for data in jsondata:
for k in data.keys():
if k not in keys:
keys.append(k)
# stage 2 - write rows to CSV file
with open('jsonoutput.csv', 'w', newline='') as fout:
csv_writer = csv.DictWriter(fout, fieldnames=keys)
csv_writer.writeheader()
for data in jsondata:
csv_writer.writerow(data)
你能试着正常读取它,然后使用.to_csv
将它合并到csv吗
df = pd.read_json('G:userjsondata')
#df = pd.json_normalize(df['Column Name']) #if you want to normalize it
dv.to_csv('example.csv')