2010-10-20 53 views
5

Trong python, tôi có một hệ thống phân cấp đối tượng phức tạp được tạo thành từ danh sách và từ điển. Tôi muốn nhổ tất cả ra CSV hoặc một số loại định dạng cơ sở dữ liệu khác. Bất kỳ câu trả lời trong Python hoặc Javascript rất nhiều đánh giá cao.Chuyển đổi JSON sang CSV

Tôi hiểu rằng một tệp CSV (hoặc bảng) chỉ có thể đại diện cho một 'cấp' của đối tượng trong phân cấp của tôi, vì vậy giải pháp sẽ cần tạo nhiều tệp.

Dưới đây là một ví dụ:

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

sẽ trở thành

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 

Về cơ bản điều duy nhất thú vị xảy ra ở đây là sự phân công của id mới để các hàng trong bảng có thể được liên kết.

Chúc mừng, Dave

Trả lời

0

giao ids mới để các hàng trong bảng có thể được liên kết.

Như trong:

  1. Tạo một Primary Key (PK) cho mỗi hàng.

  2. Tạo mối quan hệ khóa ngoại (FK) giữa Xe và Người. Dường như Ô tô có mối quan hệ "phụ thuộc" với Người.

Bước 1. Sử dụng enumerate trên đối tượng JSON của bạn. Điều này sẽ cung cấp cho bạn một PK tiện dụng cho mỗi người.

Bước 2. Sử dụng PK tiện dụng cho từng Người làm FK cho mỗi Xe bạn tạo.

Điều duy nhất khó chịu là gán PK cho Ô tô vì không có cách nào tiện dụng để sử dụng enumerate trên cấu trúc dữ liệu cụ thể của bạn. Đối với điều đó, bạn phải sử dụng một bộ đếm cũ tốt.

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

2

hãy thử một cái gì đó như thế này.

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

# Bây giờ bạn có json của bạn vào tệp csv để định dạng bạn có thể sử dụng 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

tôi vừa phát hành một module mà làm cho quá trình này dễ dàng trong 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