2010-10-20 260 views
5

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

我知道一个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的分配,以便在表中的行可以关联。

干杯,戴夫 的新的ID,这样的表中的行可以关联

回答

0

分配。

如:

  1. 创建于各行的主键(PK)。

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

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

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

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

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

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 

...

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