将JSON转换为CSV

时间:2010-10-20 09:21:33

标签: python json csv

在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,以便表中的行可以关联。

干杯, 戴夫

4 个答案:

答案 0 :(得分:2)

尝试这样的事情。

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

...

答案 1 :(得分:0)

  

分配新的ID,以便表中的行可以关联。

如:

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

  2. 在Car和Person之间创建外键(FK)关系。看来Car在Person上有“依赖”关系。

  3. 步骤1.在JSON对象上使用enumerate。这将为每个人提供方便的PK。

    步骤2.为每个人使用方便的PK作为您创建的每辆车的FK。

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

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

答案 2 :(得分:0)

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()

答案 3 :(得分:0)

我刚刚发布了一个模块,可以在Node.js中轻松完成此过程

var jsonexport = require('jsonexport');

var contacts = [{
   name: 'Bob',
   lastname: 'Smith',
   family: {
       name: 'Peter',
       type: 'Father'
   }
},{
   name: 'James',
   lastname: 'David',
   family:{
       name: 'Julie',
       type: 'Mother'
   }
},{
   name: 'Robert',
   lastname: 'Miller',
   family: null,
   location: [1231,3214,4214]
},{
   name: 'David',
   lastname: 'Martin',
   nickname: 'dmartin'
}];

jsonexport(contacts,function(err, csv){
    if(err) return console.log(err);
    console.log(csv);
});

https://www.npmjs.com/package/jsonexport