bestimmtes json-Element löschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
RudelGurken
User
Beiträge: 29
Registriert: Freitag 24. Mai 2013, 09:51

Hallo Forum,
ich habe ein JSON-Code, der schaut ungefähr so aus:

Code: Alles auswählen

{
		"pin":"8",
		"status":"false",
		"bezeichnung":"beregnungsanlage",
		"schaltung":[
		{
			"id":"3",
			"on":"9/0/0",
			"off":"9/0/30"
		},{
			"id":"4",
			"on":"11/0/0",
			"off":"11/0/30"
		},{
			"id":"5",
			"on":"19/0/0",
			"off":"19/0/30"
		}]
	},{
		"pin":"9",
		"status":"false",
		"bezeichnung":"heizkabel_unten",
		"schaltung":[
		{
			"id":"6",
			"on":"0/0/0",
			"off":"0/0/0"
		}]
	}

Nun möchte ich gerne das Schaltungsobjekt löschen, welches eine bestimmte id hat. Ändern funktioniert bereits, aber das Löschen scheint mir gerade arge Probleme zu bereiten.
Vielleicht kann mir von euch jemand einen Tipp geben, eventuell reicht mir die Löschenfunktion, ich scheine mich auch gerade nicht mit google zu verstehen.
mit besten Grüßen und einen schönen Samstag wünschend
BlackJack

@RudelGurken: Die Struktur ist unvollständig und welches davon ist das „Schaltungsobjekt” das eine ID hat? Falls das die Wörterbücher in den Listen zu den 'schaltung'-Schlüsseln sind: Erstelle eine neue Liste ohne das Wörterbuch mit dem 'id'-Wert das Du löschen möchtest und ersetze die Alte damit.
RudelGurken
User
Beiträge: 29
Registriert: Freitag 24. Mai 2013, 09:51

Hi,
also ich habe das jetzt wie folgt gelöst und hoffe, dass ich damit hinkomme.
mit bestem Gruß das Rudel Gurken

Code: Alles auswählen

def deleteTime(schaltungsid):
	for item in sensoren["geraete"]:
                index = 0
		for subitem in item["schaltung"]:
			if subitem["id"] == schaltungsid:
				item["schaltung"].pop(index)
			else:
				index = index + 1
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@RudelGurken: Einrücktiefe sollte 4 Leerzeichen sein, damit wird der Code leichter lesbar. Variablennamen sollten aussagekräftig sein.
Das Hochzählen eines Indexes ist umständlich, daher hatte BlackJack vorgeschlagen, einfach eine neue Liste anzulegen:

Code: Alles auswählen

def delete_time(schaltungsid):
    for geraet in sensoren["geraete"]:
        geraet["schaltung"] = [schaltung for schaltung in geraet["schaltung"]
                               if schaltung["id"] != schaltungsid]
Antworten