Seite 1 von 1

bestimmtes json-Element löschen

Verfasst: Samstag 28. Februar 2015, 17:31
von RudelGurken
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

Re: bestimmtes json-Element löschen

Verfasst: Samstag 28. Februar 2015, 17:40
von 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.

Re: bestimmtes json-Element löschen

Verfasst: Sonntag 1. März 2015, 18:40
von RudelGurken
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

Re: bestimmtes json-Element löschen

Verfasst: Sonntag 1. März 2015, 18:51
von Sirius3
@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]