JSON到CSV:标题问题关键字

falq053o  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(151)

我正在尝试将一个很长的JSON文件转换为CSV。我目前正在尝试使用下面的代码来完成这一任务。

import json
import csv
 
with open('G:\user\jsondata.json') as json_file:
    jsondata = json.load(json_file)
 
data_file = open('G:\user\jsonoutput.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中有更多的键需要使用,这会导致值的混乱,我想知道是否有人能帮我找到一种方法来获取所有可能的头,并在一行不t包含键或该键值。
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", ...},
    {...},
    {...},

]

我已经到处寻找可能的解决方案,但无法找到任何人有类似的问题。

yiytaume

yiytaume1#

如果要使用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)
2izufjch

2izufjch2#

你能不能试着正常读取它,然后用.to_csv将它cobert为csv,如下所示:

df = pd.read_json('G:\user\jsondata')
#df = pd.json_normalize(df['Column Name']) #if you want to normalize it

dv.to_csv('example.csv')

相关问题