在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,以便表中的行可以关联。
干杯, 戴夫
答案 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,以便表中的行可以关联。
如:
为每一行创建一个主键(PK)。
在Car和Person之间创建外键(FK)关系。看来Car在Person上有“依赖”关系。
步骤1.在JSON对象上使用enumerate
。这将为每个人提供方便的PK。
步骤2.为每个人使用方便的PK作为您创建的每辆车的FK。
唯一令人不快的是将PK分配给汽车,因为没有方便的方法在您的特定数据结构上使用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);
});