将JSON转换为CSV

5
在Python中,我有一个由列表和字典构成的复杂对象层次结构。我希望将其全部输出为CSV或其他数据库格式。非常感谢使用Python或Javascript提供任何答案。
我知道一个CSV文件(或表)只能表示我的层次结构中的一个“级别”,因此解决方案需要创建多个文件。
以下是一个示例:
{
    "Person" : [{"name":"Greg","age":"35","car":["honda civic","ford focus"]},
                {"name":"Steve","age":"28", "car":["mazda 323", "toyota camry"]}]
}

would become

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,以便将表中的行关联起来。

祝好, Dave

4个回答

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
我刚发布了一个在 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


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
分配新的ID,以便将表中的行关联起来。
例如:
1. 为每一行创建一个主键(PK)。 2. 在汽车和人之间创建外键(FK)关系。看起来汽车对于人有一个“从属”关系。
步骤1:在JSON对象上使用enumerate。这将为每个人提供一个方便的主键(PK)。
步骤2:使用每个人的方便的PK作为您创建的每个汽车的FK。
唯一不愉快的事情是为汽车分配PK,因为没有方便的方法可以在特定的数据结构上使用enumerate。为此,您必须使用一个好的老计数器。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接