转换JSON为CSV

2024-05-12 21:42:21 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,我有一个由列表和字典组成的复杂对象层次结构。我想把它全部吐出CSV或其他类型的数据库格式。非常感谢Python或Javascript中的任何答案。

我知道一个CSV文件(或表)只能表示层次结构中一个“级别”的对象,因此解决方案需要创建多个文件。

下面是一个例子:

{
    "Person" : [{"name":"Greg","age":"35","car":["honda civic","ford focus"]},
                {"name":"Steve","age":"28", "car":["mazda 323", "toyota camry"]}]
}

会变成

Person.csv:
id,name,age
1,Greg,35
2,Steve,28

car.csv:
id,Person_id,value
1,1,honda civic
2,1,ford focus
3,2,mazda 323
4,2,toyota camry

基本上,这里唯一有趣的事情是分配新的id,以便可以关联表中的行。

干杯, 戴夫


Tags: 文件csv对象nameidage层次结构car
3条回答

assignment of new ids so that the rows in the tables can be associated.

如所示:

  1. 为每一行创建一个主键(PK)。

  2. 在车和人之间创建外键(FK)关系。似乎汽车对人有“依赖”关系。

第一步。对JSON对象使用enumerate。这会给你每个人一个方便的PK。

第二步。使用每个人的方便PK作为您创建的每辆车的FK。

唯一令人不快的是将PK分配给Cars,因为在您的特定数据结构上没有使用enumerate的方便方法。为此,你必须使用一个好的旧柜台。

http://docs.python.org/library/functions.html#enumerate

import json
import csv
temp = json.load(open('filename.json','r'))
output =[]
for each in temp:
     row = {}
     row['field1'] =each['field1']
     row['field2'] = each['field2']
     output.append(row)
file = open( "filename_destination.csv", "w")

fileWriter = csv.writer(file , delimiter=",",quotechar='"', quoting=csv.QUOTE_MINIMAL)

Header = ['field1','field2']

fileWriter.writerow(Header)

for x in output:
te = [x['field1'],x['field2']]
fileWriter.writerow(te)
file.close()

试试这样的。

json_dict = {
    "Person" : [{"name":"Greg","age":"35","car":["honda civic","ford focus"]},
                {"name":"Steve","age":"28", "car":["mazda 323", "toyota camry"]}]
}

for entity in json_dict:
    csv_file = open('%s.csv' % entity, 'wb')
    headers = a[entity][0].keys()
    csv_writer = csv.DictWriter(csv_file, headers)
    map(csv_writer.writerow, json_dict[entity])
    csv_file.close()

#现在您有了json到csv的格式化文件,可以使用awk

awk  -F , '{print NR ", " $2 ", " $3 }' Person.csv > person.csv

。。。

相关问题 更多 >