2016-05-21 17 views
1

Hier ist ein Beispiel für die Daten, die ich habe.Wie kann ich eine flache JSON-Datei mit Zeilen variabler Länge in eine CSV-Datei konvertieren?

{"a":"1", "b":"2", "c":"3"}, 
{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5"}, 
{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5", "f":"6"} 

Ich mag die csv als:

a,b,c,d,e,f 
1,2,3 
1,2,3,4,5 
1,2,3,4,5,6 

ich online verschiedene Konverter versucht, aber als die JSON-Datei etwa 10 mb, ich bin nicht in der Lage es online zu konvertieren.

+0

Warum wollen Sie Ihre Daten als Header benutzen? Mit Daten meine ich den Wert der Schlüssel. – styvane

+0

Ich meinte Header als a, b, c, d, e, f. – Fawad

+0

Was passiert, wenn der Eingang eine Zeile '{" b ":" 2 "," c ":" 3 "}'? Meinst du auch Kommas am Ende jeder Zeile? –

Antwort

1
import csv 
import json 

with open('in.json') as infile: 
    data = json.load(infile) 

headers = set() 
for row in data: 
    headers.update(row.keys()) 

with open('out.csv', 'w') as outfile: 
    writer = csv.DictWriter(outfile, headers) 
    writer.writeheader() 
    writer.writerows(data) 

in.json:

[ 
    {"a":"1", "b":"2", "c":"3"}, 
    {"a":"1", "b":"2", "c":"3", "d":"4", "e":"5"}, 
    {"a":"1", "b":"2", "c":"3", "d":"4", "e":"5", "f":"6"} 
] 

out.csv:

a,c,b,e,d,f 
1,3,2,,, 
1,3,2,5,4, 
1,3,2,5,4,6 
+0

Was passiert, wenn ich die Header nicht manuell definiere? Auch meine Daten sind in einer JSON-Datei. – Fawad

+0

@Fawad hat die Antwort aktualisiert. –

+0

@Thanks Alex, ich habe versucht, den obigen Code, aber ich bekomme diesen Fehler UnicodeEncodeError: 'Charmap' Codec kann nicht codieren Zeichen in Position 1946-1948: Zeichenkarten zu Fawad

0

Ich kam auf diese:

o = ({"a":"1", "b":"2", "c":"3"},{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5"},{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5", "f":"6"}) 

header_row = [] 

# gets the header 
for row in o: 
    for key, value in row.iteritems(): 
     if not key in header_row: 
      header_row += key 
      print(key + ',', end='') 

# goes through the data 
for row in o: 
    for header_cell in header_row: 
     if header_cell in row: 
      print(row[header_cell] + ',', end='') 
     else: 
      print(',', end='') 
Verwandte Themen