2010-10-20 4 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 

В принципе единственное интересное здесь происходит назначение новых идентификаторов так, что строки в таблицах могут быть связаны.

Приветствия, Dave

ответ

0

присвоение новых идентификаторов так, что строки в таблицах могут быть связаны.

Как и в:

  1. Создать первичный ключ (PK) для каждой строки.

  2. Создать внешний ключ (FK) между автомобилем и персоналом. Похоже, что автомобиль имеет «зависимое» отношение к Человеку.

Шаг 1. Используйте enumerate на своих объектах JSON. Это даст вам удобный ПК для каждого человека.

Шаг 2. Используйте удобный ПК для каждого человека как FK для каждого создаваемого вами автомобиля.

Единственное, что неприятно назначать PK для автомобилей, поскольку нет удобного способа использовать 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

Смежные вопросы