Erstellen von verschachtelten JSON CSV
Ich schon gelesen Erstellen von verschachtelten JSON von flachen csv, aber es hat nicht geholfen in meinem Fall.
Ich haben ein großes Arbeitsblatt, erstellt mit Google Docs, bestehend aus 11 Zeilen und 74 Spalten (einige Spalten sind nicht besetzt).
Ich ein Beispiel erstellt, auf Google Drive. Beim Export als CSV
sieht es wie folgt aus:
id,name,email,phone,picture01,picture02,picture03,status
1,Alice,[email protected],2131232,"image01_01
[this is an image]",image01_02,image01_03,single
2,Bob,[email protected],2854839,image02_01,"image02_02
[description to image 2]",,married
3,Frank,[email protected],987987,image03_01,image03_02,,single
4,Shawn,[email protected],,image04_01,,,single
Nun würde ich gerne eine JSON
Struktur, die wie folgt aussieht:
{
"persons": [
{
"type": "config.profile",
"id": "1",
"email": "[email protected]",
"pictureId": "p01",
"statusId": "s01"
},
{
"type": "config.pictures",
"id": "p01",
"album": [
{
"image": "image01_01",
"description": "this is an image"
},
{
"image": "image_01_02",
"description": ""
},
{
"image": "image_01_03",
"description": ""
}
]
},
{
"type": "config.status",
"id": "s01",
"status": "single"
},
{
"type": "config.profile",
"id": "2",
"email": "[email protected]",
"pictureId": "p02",
"statusId": "s02"
},
{
"type": "config.pictures",
"id": "p02",
"album": [
{
"image": "image02_01",
"description": ""
},
{
"image": "image_02_02",
"description": "description to image 2"
}
]
},
{
"type": "config.status",
"id": "s02",
"status": "married"
}
]
}
Und so weiter für die anderen Zeilen.
Mein theoretischer Ansatz wäre durch die CSV
Datei pro Zeile (hier beginnt das erste problem: jetzt jede Zeile entspricht einer Zeile, manchmal aber auch mehrere, so muss ich zähle die Kommas?). Jede Zeile entspricht einem block von config.profile
einschließlich der id
, email
, pictureId
, und statusId
(die letzten beiden sind wird generiert je nach der Zeilennummer).
Dann für jede Zeile ein config.pictures
block generiert wird, mit der gleichen id
als eine eingefügt in die config.profile
block. Die album
ist ein array mit so vielen Elementen wie Bilder gegeben sind.
Schließlich jede Zeile hat eine config.status
block, die, wieder, hat den gleichen id
als der in config.profile
, und ein Eintrag von status
mit dem entsprechenden status.
Ich bin völlig ahnungslos, wie die verschachtelte und bedingte JSON-Datei.
Bekam ich nur zu dem Punkt, wo ich konvertieren Sie die CSV
gültigen JSON
ohne Verschachtelung und zusätzliche Infos, die nicht direkt in die CSV
, wie die type
, pictureId
, statusId
, und so weiter.
Jede Hilfe ist willkommen. Wenn es einfacher zu Programmieren, diese in einem anderen Skript-Sprache (wie ruby
), würde ich gerne wechseln).
Bevor jemand denkt das ist eine Hausaufgabe oder ähnliches. Es ist nicht. Ich will einfach nur, um zu automatisieren, sonst sehr lästige copy&paste Aufgabe.
InformationsquelleAutor cherrun | 2013-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
csv
Modul behandelt die CSV-schön zu Lesen - einschließlich der Handhabung von Zeilenumbrüchen, die innerhalb von Anführungszeichen.Den
csv.reader
Objekt einer iterator - Sie können Durchlaufen der Zeilen in der CSV-durch die Verwendung einerfor
Schleife. Jede Zeile ist eine Liste, so können Sie jedes Feld alsrow[0]
,row[1]
usw. Werden Sie sich bewusst, dass dieser laden die erste Zeile (nur Feldnamen enthält in Ihrem Fall).Da haben wir Feld Namen gegeben, um uns in der ersten Reihe, wir können
csv.DictReader
so, dass die Felder in jeder Zeile zugegriffen werden kann, wierow['id']
,row['name']
usw. Dies wird auch überspringen die erste Zeile für uns:Für die JSON exportieren, verwenden Sie die
json
Modul.json.dumps()
dauert Python-Datenstrukturen wie Listen und dictionaries und zurück, das entsprechende JSON-string:Wenn Sie wollen, zu generieren JSON-Ausgabe genau so, wie Sie geschrieben sind, würden Sie etwas wie:
output_json
enthält die JSON-Ausgabe, die Sie wollen.Allerdings würde ich vorschlagen, dass Sie sorgfältig prüfen, die Struktur der JSON-output, dass Sie nach den - in dem moment, du bist die Definition eines äußeren Wörterbuch, dient keinem Zweck, und Sie sind das hinzufügen von '
config
' Daten direkt unter 'persons
' - möchten Sie vielleicht zu überdenken.InformationsquelleAutor ajd