【问题标题】:Check if key/value is in JSON检查键/值是否在 JSON 中
【发布时间】:2015-02-28 10:13:07
【问题描述】:

使用此代码

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-Feed:

{
 "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”)?我的脚本应该返回 TRUE 或 FALSE

更新

如果我按照答案中的建议添加此代码,它可以正常工作:

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)

【问题讨论】:

  • 那是因为你正在转储json,你应该使用d=json.loads(result)或者先加载json。
  • 谢谢,这就是解决方案!
  • 不用担心,您还需要使用in 来查找如果'body' 是我的字典,其他答案正在寻找一个值Present,我想这不是您想要的.我假设present 你的意思是存在

标签: python json


【解决方案1】:

你也应该检查一下 body 键是否真的存在。

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)

【讨论】:

  • 你在同一个分支 - jsonContents["objects"][0]["data"] 4 次!在这种情况下,通常会为中间变量赋值。你使用三元运算符来分配一个布尔值!如果第一个条件是 True - 不需要评估第二个
【解决方案2】:
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"]))

【讨论】:

  • 为什么只对 2 个值使用 any?简单的 or 就可以了
猜你喜欢
  • 2022-07-12
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多