2015-02-28 14 views
5

Với mã nàyKiểm tra xem key/value là trong 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 

tôi nhận được một JSON-Feed như thế này:

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

Làm thế nào tôi có thể kiểm tra nếu 'cơ thể' là 'hiện tại' (hoặc 'mã' là '200')? Kịch bản của tôi nên trở về TRUE hoặc FALSE

CẬP NHẬT

Nếu tôi thêm mã này như đề xuất trong các câu trả lời nó hoạt động tốt:

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

Đó là bởi vì bạn đang bán phá giá json, bạn nên hoặc sử dụng 'd = json.loads (kết quả)' hoặc chỉ tải các json đầu tiên. –

+0

Thx, đó là giải pháp! – Simon

+0

không phải lo lắng, bạn cũng cần phải sử dụng 'in' để tìm nếu' 'body'' là i dict, các câu trả lời khác đang tìm kiếm một giá trị 'Present' mà tôi tưởng tượng không phải là những gì bạn muốn. Tôi giả sử bằng 'hiện tại' bạn có nghĩa là tồn tại –

Trả lời

5

Bạn cũng nên có thể kiểm tra nếu phím cơ thể thực sự là đó.

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

Bạn đang đi xuống cùng một chi nhánh - __jsonContents [" đối tượng "] [0] [" dữ liệu "] __ 4 lần! Trong trường hợp này, thông thường chỉ định một giá trị cho một biến trung gian. Và bạn sử dụng toán tử bậc ba để gán giá trị boolean! Và nếu điều kiện thứ nhất là _True_ - không cần đánh giá số 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

Tại sao lại sử dụng _any_ chỉ cho 2 giá trị? Đơn giản _or_ sẽ làm – volcano

Các vấn đề liên quan