JSON mit mehreren Instanzen jeweils einen Wert in Array übernehmen

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
marcusp
User
Beiträge: 10
Registriert: Donnerstag 10. Januar 2019, 07:37

Donnerstag 10. Januar 2019, 13:13

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
__deets__
User
Beiträge: 4209
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 10. Januar 2019, 13:58

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?
marcusp
User
Beiträge: 10
Registriert: Donnerstag 10. Januar 2019, 07:37

Donnerstag 10. Januar 2019, 14:01

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?
Benutzeravatar
sparrow
User
Beiträge: 874
Registriert: Freitag 17. April 2009, 10:28

Donnerstag 10. Januar 2019, 14:03

Es gibt das Modul json, damit parst du das und hast dann die entsprechenden Python-Pendants.
__deets__
User
Beiträge: 4209
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 10. Januar 2019, 14:24

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.
marcusp
User
Beiträge: 10
Registriert: Donnerstag 10. Januar 2019, 07:37

Donnerstag 10. Januar 2019, 19:29

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 :-)
Antworten