Конвертировать JSON в CSV - PullRequest
       17

Конвертировать JSON в CSV

5 голосов
/ 20 октября 2010

В 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

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

Приветствия, Дейв

Ответы [ 4 ]

2 голосов
/ 20 октября 2010

попробуйте что-то вроде этого.

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 to csv для форматирования, который вы можете использовать awk;

awk  -F , '{print NR ", " $2 ", " $3 }' Person.csv > person.csv

...

0 голосов
/ 11 апреля 2015

Я только что выпустил модуль, который облегчает этот процесс в 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 голосов
/ 09 мая 2013
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 голосов
/ 20 октября 2010

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

Как в:

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

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

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

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

Единственное, что неприятно, - это назначать ПК для автомобилей, поскольку нет удобного способа использовать enumerate в вашей конкретной структуре данных. Для этого вы должны использовать старый добрый счетчик.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...