Seite 1 von 1

JSON mit mehreren Instanzen jeweils einen Wert in Array übernehmen

Verfasst: Donnerstag 10. Januar 2019, 13:13
von marcusp
Hallo zusammen,

ich beschäftige mich erst seit kurzem mit Python. Daher verzeiht mir bitte, falls die Lösung bereits hier irgendwo im Forum zu finden ist, ich sie aber mangels Fachbegriffen (oder fehlender Erkennung des Zusammenhangs aus den Titeln in den Ergebnissen) nicht finden konnte.

Bitte verweist mich gerne auf eine passende Antwort, mit deren Hilfe ich weiter komme mit Python und meiner konkreten Problematik

So, genug Geschwafel. Hier mein Problem:

Ich habe eine JSON-Datei deren Content ungefähr so ausschaut (es können mal mehr, mal weniger "Array-Elemente" sein):<br/>

Code: Alles auswählen

[
	{
		"ID": "313123123",
		"blubber": "acd",
		"marshal": "london",
		"pol": "0100111001",
		"tree": "7",
		"leaf": "2",
		"ader": "17"
	},
	{
		"Name": "Ubuntu",
		"Version": "17.10",
		"Install": "apt",
		"Owner": "Canonical",
		"Kernel": "4.13",
		"symbol": "punkte"
	},
	{
		"Name": "Fedora",
		"Version": "26",
		"Install": "dnf",
		"Owner": "Red Hat",
		"Kernel": "4.13",
		"symbol": "feder"
	}
]
Ich möchte nun gerne diese JSON-Datei einlesen und das erste Element (ID bis Ader) ignorieren und aus allen folgenden Elementen nur das den letzten Wert "symbol" in einen Python-Array für die weitere Verarbeitung schreiben.

Beispiel: ["punkte", "feder"]

Was ich beim Googeln bisher gefunden habe wäre die Möglichkeit zur Verarbeitung des JSON, wenn es nur ein Element wäre wie dieses hier:

Code: Alles auswählen

[
	{
		"Name": "Gentoo",
		"Version": "Rolling Release",
		"Install": "emerge",
		"Owner": "Gentoo Foundation",
		"Kernel": "4.12",
		"symbol": "rund"
	}
]
Aber schon, dass es ein Array-Alement gibt, das ich nicht brauche und, dass es mehrere sind, stellt mich aktuell vor eine unlösbare Aufgabe

Ich bin für jeden Hinweis dankbar, der mir hilft zu lernen, wie ich das löse.

Dankeeeee

Re: JSON mit mehreren Instanzen jeweils einen Wert in Array übernehmen

Verfasst: Donnerstag 10. Januar 2019, 13:58
von __deets__
Der Ablauf ist simpel:

- wandere ueber alle Elemente in deinem JSON
- wenn du ein Element gefunden hast, das dich interessiert, stopf den Wert der dich interessiert in eine Ergebnisliste.

Der Schluessel ist die Frage danach, was interessante von uninteressanten Elementen unterscheidet. Was ist das Kriterium genau?

Re: JSON mit mehreren Instanzen jeweils einen Wert in Array übernehmen

Verfasst: Donnerstag 10. Januar 2019, 14:01
von marcusp
Also kann ich durch das JSON gehen wie über eine Liste z.B. in einer Schleife?
Und wenn Key = "symbol" stopfe Wert in meinen Python-Array?

Re: JSON mit mehreren Instanzen jeweils einen Wert in Array übernehmen

Verfasst: Donnerstag 10. Januar 2019, 14:03
von sparrow
Es gibt das Modul json, damit parst du das und hast dann die entsprechenden Python-Pendants.

Re: JSON mit mehreren Instanzen jeweils einen Wert in Array übernehmen

Verfasst: Donnerstag 10. Januar 2019, 14:24
von __deets__
JSON hat verschiedene Typen enthalten. Nummer, Strings, Listen und Objekte, die in Python Woerterbuecher/dicts sind. "Durch das JSON gehen wie ueber eine Liste" geht also dann, wenn man eine Liste vor sich hat. Und ja, mit einer for-schleife.

Aber dann hast du Objekte/dicts. Da ist dann die Frage "ist ein Key in dem Objekt", und das ist in python mit

if key in thing:

zu beantworten.

Re: JSON mit mehreren Instanzen jeweils einen Wert in Array übernehmen

Verfasst: Donnerstag 10. Januar 2019, 19:29
von marcusp
Dankeschön :-)

Es hat funktioniert.
Hier noch meine "Lösung" falls jemand beim Suchen auf meine Frage stößt :-)

Code: Alles auswählen

json_string = '[{"ID": "313123123","blubber": "acd","marshal": "london","pol": "0100111001","tree": "7","leaf": "2","ader": "17"},{"Name": "Ubuntu","Version": "17.10","Install": "apt","Owner": "Canonical","Kernel": "4.13","symbol": "quadrat"},{"Name": "Ubuntu","Version": "17.10","Install": "apt","Owner": "Canonical","Kernel": "4.13","symbol": "kreis"}]'

import json
parsed_json = json.loads(json_string)

for key in parsed_json:
	if "symbol" in (key): 
		print (key["symbol"])
Die Ausgabe sieht dann die gewünscht so aus:

Code: Alles auswählen

quadrat
kreis
Statt Ausgabe könnte ich sie mir auch zur weiteren Verarbeitung in einen Array schreiben :-)