2015-02-28 4 views
5

में है इस कोड के साथजांच करें कि कुंजी/मान JSON

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 

मैं इस तरह एक JSON-फीड मिलती है:

{ 
"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" 
} 

मैं कैसे जांच कर सकते हैं 'शरीर' 'वर्तमान' (है या 'कोड' '200' है)? मेरे स्क्रिप्ट लौट जाना सही या गलत

अद्यतन

के रूप में जवाब में प्रस्तावित मैं इस कोड जोड़ देते हैं तो यह ठीक काम करता है:

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

है ऐसा इसलिए है क्योंकि आप json डंप कर रहे हैं, या तो आप का उपयोग करना चाहिए 'd = json.loads (परिणाम)' या सिर्फ पहली json लोड। –

+0

Thx, वह समाधान था! – Simon

+0

कोई चिंता नहीं, आपको ''' 'शरीर का पता लगाने के लिए' इन 'का उपयोग करने की भी आवश्यकता है, अन्य जवाब एक मूल्य' वर्तमान 'की तलाश में हैं जो मैं कल्पना करता हूं कि आप जो चाहते हैं वह नहीं है। मुझे लगता है कि 'वर्तमान' से आपका मतलब है –

उत्तर

5

तुम भी हो सकता है की जाँच करनी चाहिए अगर शरीर कुंजी वास्तव में है क्या आप वहां मौजूद हैं।

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

आप एक ही शाखा में जा रहे हैं - __json सामग्री ["ऑब्जेक्ट्स]] [0] [" डेटा "] __ 4 बार! ऐसे मामले में, यह एक मध्यवर्ती चर के लिए एक मूल्य असाइन करने के लिए प्रथागत है। और आप एक बुलियन मूल्य असाइन करने के लिए टर्नरी ऑपरेटर का उपयोग करते हैं! और यदि पहली शर्त _True_ है - दूसरे – 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

का मूल्यांकन करने की आवश्यकता नहीं है क्यों _any_ का उपयोग केवल 2 मानों के लिए करें? सरल _or_ करेगा – volcano

संबंधित मुद्दे