2015-02-28 11 views
5

Mit diesem CodeÜberprüfen Sie, ob Schlüssel/Wert in JSON ist

import sense 
import json 

sense.api_key = '...' 
node = sense.Node.retrieve('........') 
feed = node.feeds.retrieve('presence') 

events = feed.events.list(limit=1) 

result = json.dumps(events,indent=1) 
print result 

erhalte ich eine JSON-Feed-wie folgt aus:

{ 
"links": {...}, 
"objects": [ 
    { 
    "profile": "GenStandard", 
    "feedUid": ".....", 
    "gatewayNodeUid": ".....", 
    "dateServer": "2015-02-28T09:57:22.337034", 
    "geometry": null, 
    "data": { 
    "body": "Present", 
    "code": 200 
    }, 
    "signal": "-62", 
    "dateEvent": "2015-02-28T09:57:22.000000", 
    "type": "presence", 
    "payload": "2", 
    "nodeUid": "....." 
    } 
], 
"totalObjects": 875, 
"object": "list" 
} 

Wie kann ich, wenn 'Körper' überprüfen ist 'Gegenwart' (oder "Code" ist "200")? Mein Skript sollte TRUE oder FALSE zurück

UPDATE

Wenn ich diesen Code hinzufügen, wie in den Antworten vorgeschlagen, es funktioniert:

d=json.loads(result) 
def checkJson(jsonContents): 
    bodyFlag = True if "body" in jsonContents["objects"][0]["data"] and jsonContents["objects"][0]["data"]["body"] == "Present" else False 

    return bodyFlag 

print checkJson(d) 
+1

Das liegt daran, dass Sie die json Dumping, sollten Sie entweder 'd = json.loads (Ergebnis)' oder direkt mit der ersten json laden. –

+0

Thx, das war die Lösung! – Simon

+0

keine Sorgen, Sie müssen auch 'in' verwenden, um zu finden, wenn' 'body'' ist ich das dict, die anderen Antworten suchen nach einem Wert' Present', die ich vorstellen, ist nicht das, was Sie wollen. Ich nehme an, mit "Present" meinen Sie existiert –

Antwort

5

Sie sollten vielleicht auch überprüfen, ob der Körper Schlüssel tatsächlich ist Dort.

def checkJson(jsonContents): 
    bodyFlag = True if "body" in jsonContents["objects"][0]["data"] and jsonContents["objects"][0]["data"]["body"] == "Present" else False 
    codeFlag = True if "code" in jsonContents["objects"][0]["data"] and jsonContents["objects"][0]["data"]["code"] == 200 else False 

    return bodyFlag or codeFlag 

print checkJson(result) 
+1

Sie gehen den gleichen Zweig - __jsonContents ["Objekte"] [0] ["Daten"] __ 4 mal! In einem solchen Fall ist es üblich, einer Zwischenvariablen einen Wert zuzuordnen. Und Sie verwenden ternären Operator, um einen booleschen Wert zuzuweisen! Und wenn die erste Bedingung ist _True_ - keine Notwendigkeit, die 2. – volcano

3
d = json.loads(results) 
objs = d["objects"][0] 
# see if any code is either == 200 or "body" is a key in the subdict 
return any(x for x in (objs["data"]["code"] == 200,"body" in objs["data"])) 
+0

zu bewerten Warum _any_ nur für 2 Werte verwenden? Einfach _oder_ wird tun – volcano

Verwandte Themen