我有一些需要转换为csv的json文件。
我写了一个非常简单的脚本,但结果出乎意料。我没有将json文件的所有内容都写到csv文件中,而是仅获得顶级名称,每个字母之间用逗号分隔。这是json文件的内容:
{"drivers": [{"id": 91907, "groupId": 9039, "vehicleId": 212014918234488, "username": "abrauer"},
{"id": 134763, "groupId": 9039, "vehicleId": 212014918234742, "username": "abarbosa"},
{"id": 134764, "groupId": 9039, "vehicleId": 212014918234709, "username": "btoole"},
{"id": 134766, "groupId": 9039, "vehicleId": 212014918234773, "username": "bheinsohn"}]}
和代码:
import csv
import json
infile = open("driver.json","r")
outfile = open("driver.csv","w")
writer = csv.writer(outfile)
for row in json.loads(infile.read()):
writer.writerow(row)
结果如下:
d,r,i,v,e,r,s。我应该在尝试转换之前从文件中删除{“ drivers”:吗?
更新... 我尝试从文件中删除{“ drivers”:以及结尾的'}',结果也很奇怪。现在,我得到的只是没有值的属性。
id,groupId,vehicleId,username
id,groupId,vehicleId,username
id,groupId,vehicleId,username
id,groupId,vehicleId,username
答案 0 :(得分:0)
发生的事情是,您的for循环正在json字典的键上进行迭代,因此您正在调用writer.writerow('drivers')
。由于字符串在python中是可迭代的,因此writer.writerow
会在驱动程序中的每一列中解释每个字符。
处理此问题的最佳方法是使用csv.writer
对象(Docs)代替使用csv.DictWriter
对象。您的代码将如下所示:
with open('driver.csv','w') as csv_f:
drivers = json.loads(infile.read())['drivers']
fields = list(drivers[0].keys())
dict_writer = csv.DictWriter(csv_f, fieldnames=fields)
dict_writer.writeheader()
for driver in drivers:
dict_writer.writerow(driver)