2010-10-20 14 views
5

En python tengo una jerarquía compleja de objetos compuesta de listas y diccionarios. Quiero escupirlo todo en CSV u otro tipo de formato de base de datos. Cualquier respuesta en Python o Javascript es muy apreciada.Convierta JSON a CSV

Entiendo que un archivo CSV (o tabla) solo puede representar un 'nivel' de objeto en mi jerarquía, por lo que la solución debería crear varios archivos.

Aquí se muestra un ejemplo:

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

se convertiría en

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 

Básicamente lo único interesante pasando aquí es la asignación de nuevos identificadores de modo que las filas de las tablas se pueden asociar.

Saludos, de Dave

Respuesta

0

asignación de nuevos identificadores de modo que las filas de las tablas pueden ser asociados.

Como en:

  1. crear una clave principal (PK) para cada fila.

  2. Crear una relación de clave externa (FK) entre el automóvil y la persona. Parece que Car tiene una relación "dependiente" en Person.

Paso 1. Utilice enumerate en sus objetos JSON. Esto le dará un práctico PK para cada persona.

Paso 2. Utiliza el útil PK para cada persona como FK para cada automóvil que crees.

Lo único desagradable es asignar PK a los automóviles ya que no hay una forma práctica de usar enumerate en su estructura de datos en particular. Para eso, debes usar un buen contador antiguo.

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

2

intentar algo como esto.

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

# Ahora usted tiene su JSON a archivo csv para formatear puede usar 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

acabo dio a conocer un módulo que facilita este proceso en 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