Seite 1 von 1

dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 15:39
von tholle
Hi Leute,

ich bin mal wieder kurz vor'm Aufgeben.
Ich wuerde gern aus einer komplexen JSON-Datei zwei bestimmte Wertepaare herausfiltern und in ein Dict schreiben, um spaeter damit weiterarbeiten zu koennen.

Das JSON-File ist wie folgt aufgebaut:

Code: Alles auswählen

[{"id":"11","uniqueid":"00:17:88:5E:D3:0B-0B","name":"Jal_Lesen","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true,"xy":[0.0,0.0]}},

{"id":"12","uniqueid":"00:17:88:5E:D3:0C-0C","name":"Squeeze_Kueche","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/v_s2_Power_OFF/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/v_s2_Play/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}}]
Ich habe das File mal auf zwei Eintraege reduziert (die Leerzeile dient der besseren Lesbarkeit). Sind eigentlich ca. 20 davon.
Entscheident sind fuer mich die Werte "id:XX" und "name:XXXX".
Diese beiden Werte wuerde ich gern als Dict aufnehmen und darueber spaeter gezielt etwas steuern zu koennen:
dict={"11":"Jal_Lesen", "12":"Squezze_Kueche"}
Urspruenglich hatte ich gedacht, ich iteriere ueber die komplette Ausgabe und schneide alles weg, was ich nicht gebrauchen kann (so zumindest wuerde ich das mit der Bash machen).
Ich glaube aber, dass das ueberhaupt nicht python-like ist, weswegen ich ein bisschen gesucht habe, und auf JSON-Modul gestossen bin.
Ich glaube, das koennte, was ich brauche, aber ich blicke da nicht durch.

Vielleicht koennte mir jemand einmal erklaeren, wie genau man an solche Faelle heran geht und welches die geeigneten Werkzeuge dafuer sind.

Vielen Dank schon mal und viele Gruesse,
tholle

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 15:43
von __deets__

Code: Alles auswählen

import json
data = json.loads("""{ "key": "value"}""") # hier natuerlich deine Daten
print(data["key"])
Wesentlich mehr ist da nicht dran. Deine Originaldaten sind leider unbenutzbar, da sie kein gueltiges JSON darstellen.

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 16:01
von tholle
Hi __deets__ ,

vielen Dank fuer die schnelle Antwort.
Aber ich glaube, ich verstehe da etwas nicht oder ich habe mich falsch ausgedrueckt.

Um bei deinem Beispiel zu bleiben, kenne ich ja "key!" und "value" nicht. Das ist ja genau das, was ich auslesen moechte.

Ich braeuchte aus einem Datenstrom jeweils die ID und den NAMEN mit den dazugehoerigen Werten, welche ich dann als neues Paar zusammensetzen will.

Code: Alles auswählen

ID:NAME


Und das dann, in ein neues Dict schreiben, welches dann so aussieht:

Code: Alles auswählen

dict={"ID":"AAAA","ID":"BBBB","ID":"CCCC", etc..}
Ich weiss nicht, wie ich das anders ausdruecken kann.

Vielen Dank und Gruss,
tholle

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 16:08
von __deets__
Also zuerstmal kennst du sehr wohl die Schluessel - ID, und NAME. Wenn du den nicht kennen wuerdest, waere dein weiteres Vorgehen ja unbestimmt. In meinem Beispiel ist es halt "key", bei dir "ID".

Und dein naechstes Beispiel zeigt, wo es scheinbar hakt: das was du da zeigst sieht aus wie ein Woerterbuch (dictionary), bei dem Schluessel auf Werte zeigen. Du versuchst aber mehrere Schuessel gleichen Namens anzulegen. Das geht nicht. Du musst entweder eine Liste von Worterbuechern mit jeweils einem ID/NAME Schluessel erzeugen, oder ID/NAME muessen auf eine Liste von Werten zeigen.

Eine (sehr kurze) Einfuehrung in Datenstrukturen beinhaltet das offizielle Python Tutorial:

https://docs.python.org/3/tutorial/datastructures.html

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 16:21
von tholle
Sorry, mein Beispiel ist etwas daemlich. Ich hatte sogar erst:

Code: Alles auswählen

dict = {"ID1":"AAAA", "ID2":"BBBB","ID3":"CCCC", etc...}
um sicherzugehen, dass die IDs unterschiedlich sind. Dachte dann aber, das leitet sich aus meine Beispieldaten su dem ersten Post ab.
Ich habe auf jeden Fall verstanden, was du mir sagen willst. In ein und demselben Dict muss die ID muss eindeutig sein. Soweit klar.

Aber dein Beispiel verstehe ich trotzdem nicht.

Code: Alles auswählen

>>> data = json.loads("""{"id": "value"}""")
>>> print(data["id"])
value
Wie genau soll mir das helfen? Ich meine klar, was in deinem Beispiel "key" ist, ist bei mir "id".
Was genau soll aber value? Value ist ja genau das, was ich abfragen will.

Ich stehe auf dem Schlauch.... :K

Gruss,
tholle

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 16:32
von __deets__
Na ich FRAGE den doch ab. Was ist denn daran nicht verstaendlich? Wenn du wissen willst, was der Wert fuer einen Schluessel in einem Dict ist, dann greifst du darauf zu - was anderes soll denn da passieren?

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 16:41
von tholle
Das Grundproblem ist, dass du von einem bereits vorhandem Dict ausgehst, ich aber keines habe, sondern eine Liste, in der die Werte stehen, wie in Post 1 gezeigt.

Ich versuch's mal zu erklaeren.

Ich hole mir die Liste mittels http-get.

Code: Alles auswählen

R = requests.get(http://localhost:8088,auth=requests.auth.HTTPBasicAuth("xxxxxx", "yyyyyyyy"))
Danach wird sie decodet:

Code: Alles auswählen

RR = R.content.decode("utf-8")
In RR steht jetzt (ohne Leerzeile, die habe ich hier nur wieder eingefuegt):

Code: Alles auswählen

[{"id":"11","uniqueid":"00:17:88:5E:D3:0B-0B","name":"Jal_Lesen","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true,"xy":[0.0,0.0]}},

{"id":"12","uniqueid":"00:17:88:5E:D3:0C-0C","name":"Squeeze_Kueche","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/v_s2_Power_OFF/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/v_s2_Play/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}}]
Wenn ich jetzt RR lade und wie von dir genannt ausgeben will, passiert Folgendes:

Code: Alles auswählen

>>> data = json.loads(RR)
>>> print(data["id"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
>>>
Geht also so nicht.

thx und Gruss,
tholle

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 16:48
von /me
data ist ja auch ein Liste aus Dictionaries und nicht das Dictionary selber. Du musst schon auf die einzelnen Elemente zugreifen.

Code: Alles auswählen

for element in data:
    print(element['id'])

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 16:50
von __deets__
Wie von mir schon gesagt - das was du hier zeigst, ist *KEIN* JSON. Das mag es bei dir sein, aber die Aussschnitte aus dem Log die du hier zeigst kann niemand hier zu irgendetwas sinnvollen zusammenbauen.

Da musst du schon zeigen was die daten nach der deserialisierung wirklich sind. Es ist offensichtlich irgendeine Liste, das sagt einem die Fehlermeldung. Du kannst zB das Modul pprint importieren, und mit

Code: Alles auswählen

pprint.pprint(RR) # schlechte benannte Variable, siehe PEP8
ausgeben. Dann kann man mal beurteilen, was da drin steckt.

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 17:28
von tholle
@/me

das war der entscheidende Hinweis.

Damit klappt es.
Vielen Dank!

@__deets__

Vielen Dank fuer den Tipp mit pprint.

Allerdings sehen die Daten mit pprint genauso aus.

Auszug:

Code: Alles auswählen

>>> pprint.pprint(RR)
'[{"id":"11","uniqueid":"00:17:88:5E:D3:0B-0B","name":"Jal_Lesen","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true,"xy":[0.0,0.0]}},{"id":"12","uniqueid":"00:17:88:5E:D3:0C-0C","name":"Squeeze_Kueche","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s2_Power_OFF/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s2_Play/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}}
Falls es jemanden interessiert, die Daten hole ich aus einer HA-Bridge (https://github.com/bwssytems/ha-bridge)
HA-Bridge emuliert eine Phillips-HUE-Plattform. Diese laesst sich fuer allerlei nette Spielerei missbrauchen. Z.B. um mein Smarthome (Loxone) mit meiner Logitech Harmony zu steuern und umgekehrt (z.B: TV, etc via Loxone ein- und ausschalten, oder auch ganze Activities. TV/RECEIVER/JALOUSIE/LICHT gleichzeitig fuer einen gemuetlichen TV-Abend).
Das nur so nebenbei.

Vielen Dank euch beiden jedenfalls fuer's Mitdenken.

Gruss,
tholle

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 17:31
von __deets__
@tholle ich sehe da immer noch keine vollstaendigen Daten:

Code: Alles auswählen

Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 12:54:16)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '[{"id":"11","uniqueid":"00:17:88:5E:D3:0B-0B","name":"Jal_Lesen","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true,"xy":[0.0,0.0]}},{"id":"12","uniqueid":"00:17:88:5E:D3:0C-0C","name":"Squeeze_Kueche","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s2_Power_OFF/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s2_Play/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}}
  File "<stdin>", line 1
    s = '[{"id":"11","uniqueid":"00:17:88:5E:D3:0B-0B","name":"Jal_Lesen","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true,"xy":[0.0,0.0]}},{"id":"12","uniqueid":"00:17:88:5E:D3:0C-0C","name":"Squeeze_Kueche","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s2_Power_OFF/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s2_Play/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ^
SyntaxError: EOL while scanning string literal
Insofern... das der Tipp von me funktioniert ist nicht weiter verwunderlich, deine Daten scheinen aber noch mal verschlungen anderes JSON enthalten. Das mag oder mag nicht relevant sein.

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 17:46
von tholle
Ja, die Liste hatte ich der Uebersichtlichkeit immer gekuerzt (hatte ich aber auch mehrfach erwaehnt).
Hier der vollstaendigkeithalber die komplette Liste. Sieht aber auch nicht anders aus. :D

Code: Alles auswählen

>>> RR
'[{"id":"11","uniqueid":"00:17:88:5E:D3:0B-0B","name":"Jal_Lesen","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Jal_Lesen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true,"xy":[0.0,0.0]}},{"id":"12","uniqueid":"00:17:88:5E:D3:0C-0C","name":"Squeeze_Kueche","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s2_Power_OFF/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s2_Play/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"13","uniqueid":"00:17:88:5E:D3:0D-0D","name":"Fernsehen","mapId":"21178814","mapType":"httpDevice","deviceType":"activity","targetDevice":"harmonyhub","offUrl":"[{\\"item\\":\\"{\\\\\\"name\\\\\\":\\\\\\"-1\\\\\\",\\\\\\"hub\\\\\\":\\\\\\"harmonyhub\\\\\\"}\\",\\"type\\":\\"harmonyActivity\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"{\\\\\\"name\\\\\\":\\\\\\"21178814\\\\\\",\\\\\\"hub\\\\\\":\\\\\\"harmonyhub\\\\\\"}\\",\\"type\\":\\"harmonyActivity\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"14","uniqueid":"00:17:88:5E:D3:0E-0E","name":"Squeeze-WZ","mapId":"25218149","mapType":"httpDevice","deviceType":"activity","targetDevice":"harmonyhub","offUrl":"[{\\"item\\":\\"{\\\\\\"name\\\\\\":\\\\\\"-1\\\\\\",\\\\\\"hub\\\\\\":\\\\\\"harmonyhub\\\\\\"}\\",\\"type\\":\\"harmonyActivity\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"{\\\\\\"name\\\\\\":\\\\\\"25218149\\\\\\",\\\\\\"hub\\\\\\":\\\\\\"harmonyhub\\\\\\"}\\",\\"type\\":\\"harmonyActivity\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"15","uniqueid":"00:17:88:5E:D3:0F-0F","name":"Test","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/VI111/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/VI111/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":true,"bri":254,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true,"xy":[0.0,0.0]}},{"id":"1","uniqueid":"00:17:88:5E:D3:01-01","name":"Squeeze_Buero","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s1_Power_OFF/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s1_Play/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"3","uniqueid":"00:17:88:5E:D3:03-03","name":"Squeeze_Bad","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/v_s3_Power_OFF/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"4","uniqueid":"00:17:88:5E:D3:04-04","name":"Jal_Essen","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/Jal_Essen_UP/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/Jal_Essen_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"5","uniqueid":"00:17:88:5E:D3:05-05","name":"Jal_Terrasse","targetDevice":"Ecapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/Jal_Terr_UP/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/Jal_Terr_CD/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"6","uniqueid":"00:17:88:5E:D3:06-06","name":"Autobeschattung","targetDevice":"Ecapsulated","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@loxonems.fritz.box/dev/sps/io/VI96/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"description":"","deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"7","uniqueid":"00:17:88:5E:D3:07-07","name":"Licht_TV","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Szene_TV/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Szene_TV/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"8","uniqueid":"00:17:88:5E:D3:08-08","name":"Licht_Essen","deviceType":"custom","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Szene_Essen/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Szene_Essen/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"9","uniqueid":"00:17:88:5E:D3:09-09","name":"Licht_Party","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Szene_Party/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Szene_Party/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}},{"id":"10","uniqueid":"00:17:88:5E:D3:0A-0A","name":"Licht_Abend","targetDevice":"Encapsulated","offUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Szene_Abend/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","onUrl":"[{\\"item\\":\\"http://admin:XXXXXXXXXX@192.168.26.222/dev/sps/io/Szene_Abend/pulse\\",\\"type\\":\\"httpDevice\\",\\"httpVerb\\":\\"GET\\",\\"contentType\\":\\"text/html\\"}]","inactive":false,"noState":false,"offState":false,"deviceState":{"on":false,"bri":0,"hue":0,"sat":0,"effect":"none","ct":0,"alert":"none","reachable":true}}]'
Ob das jetzt "echtes" JSON ist oder nicht, kann ich nicht beurteilen. Dafuer bin ich zu wenig in dem Thema.
Aber ich glaube dir gern, wenn du sagst, dass es das nicht ist. Aber andere Daten habe ich leider nicht.

Nachdem mein Hauptproblem geloest ist, noch schnell eine Frage zur Abfrage der Keys "ID" und "NAME" aus meiner Liste.

Ist es moeglich waehrend einer Iteration pro Durchlauf zwei Keys abzugragen?

z.B:

Code: Alles auswählen

for i, j in data:
   print(["id"],["name"])
Oder muss ich zwangslaeufig zwei mal interieren? Einmal fuer "id" und einmal fuer "name", die Werte jeweils in eine eigene Liste schreiben und diese beiden Listen anschliessend zu einem Dict "zippen"?

thx und Gruss,
tholle

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Montag 31. Juli 2017, 18:47
von tholle
Ok, hab schon.

Code: Alles auswählen

>>> for i in data:
...     print(i['id'], i['name'])
...
11 Jal_Lesen
12 Squeeze_Kueche
13 Fernsehen
14 Squeeze-WZ
15 Test
1 Squeeze_Buero
3 Squeeze_Bad
4 Jal_Essen
5 Jal_Terrasse
6 Autobeschattung
7 Licht_TV
8 Licht_Essen
9 Licht_Party
10 Licht_Abend
Vielen Dank noch mal an euch!

Gruss,
tholle

Re: dict aus bestimmten key-value-Paaren einer komplexen JSON-Datei bauen

Verfasst: Dienstag 1. August 2017, 07:24
von Sirius3
@tholle: Du benutzt requests, da kann man direkt json lesen.

Code: Alles auswählen

response = requests.get("http://localhost:8088", auth=requests.auth.HTTPBasicAuth("xxxxxx", "yyyyyyyy"))
devices = response.json()
for device in devices:
    print(device['id'], device['name'])
Denk daran, sinnvolle Variablennamen zu benutzen.