API Response auswerten

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
sa_ve
User
Beiträge: 2
Registriert: Dienstag 12. Januar 2016, 07:55

Hallo Zusammen

Über eine API Anfrage erhalte ich folgende Antwort.
{
"power": 0,
"relay": false
}

Wie kann ich nun die Werte in eine Variable schreiben?
power = 0
relay = false

Ich habe es über Directories versucht, aber leider ohne Erfolg.

Code: Alles auswählen

import urllib2
url = "http://192.168.xxx.xxx/report"
response = urllib2.urlopen(url).read(1000)

print response["power"]
print response["relay"]

power = response["power"]
relay = response["relay"]
Grüsse
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Fast richtig, das was du zurückbekommst ist JSON:

Code: Alles auswählen

import urllib2
from contextlib import closing
import json

url = "http://192.168.xxx.xxx/report"
with closing(urllib2.urlopen(url)) as response:
    j = json.load(response)

print j["power"]
print j["relay"]

power = j["power"]
relay = j["relay"]
the more they change the more they stay the same
sa_ve
User
Beiträge: 2
Registriert: Dienstag 12. Januar 2016, 07:55

Vielen Dank. Aber leider komme ich nicht mehr weiter. Wie kann ich den Wert nachher auswerten?

Code: Alles auswählen

import urllib2
from contextlib import closing
import json

n = 0
while n <= 5:
        n = n + 1

        url = "http://192.168.xxx.xxx/report"
        with closing(urllib2.urlopen(url)) as response:
                j = json.load(response)

                relay = j["relay"]
                power = j["power"]

                if j["relay"] == "False":
                        url = "http://192.168.xxx.xxx/relay?state=1"
                        urllib2.urlopen(url).read(1000)
                        print relay
                        print power
                else:
                        print "bereits AN"
                        break
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

@sa_ve: Du solltest immer mit 4 Leerzeichen pro Ebene einrücken. So wie jetzt ist es einfach zu schlecht lesbar. Statt einer while-Schleife ist eine for-Schleife hier besser. "relay" ist ein Boolean, mit einem String zu vergleichen, macht keinen Sinn, und statt explizit auf False zu vergleichen ist "not" besser. Und welchen Wert möchtest Du wie auswerten?

Code: Alles auswählen

import urllib2
from contextlib import closing
import json
 
for _ in range(6):
    url = "http://192.168.xxx.xxx/report"
    with closing(urllib2.urlopen(url)) as response:
        response = json.load(response)
        if not response['relay']:
            url = "http://192.168.xxx.xxx/relay?state=1"
            was_soll_das = urllib2.urlopen(url).read(1000)
            print response
        else:
            print "bereits AN"
            break
BlackJack

Ich wollte nur mal so nebenbei die `requests`-Bibliothek ins Gespräch bringen. Die hat eine schönere API als das `urllib`/`urllib2`-Gespann aus der Standardbibliothek.
Antworten