如果数据存在,JSON将执行某些操作,如果数据不存在,则执行其他操作

时间:2018-06-30 00:49:08

标签: python json sorting

我有一个JSON数据的API,其中包含约600个条目,每个条目都包含有关对象的变化数据。在某些情况下,有一个关键数据值,在其他情况下则没有。我想检查一下是否存在该JSON数据并将其存储,以及是否没有移至下一个设备。

尝试对具有特定数据和不具有特定数据的条目进行排序:

if data["entity"][n]["sensor_data"]["light_ intensity"] in data["entity"]:
    logger.debug("There is light_intensity data on this devcie")
    light_ intensity = data["entity"][n]["sensor_data"]["light_ intensity"]

做到这一点的最佳方法是什么?现在,我得到KeyError的“光强度”未定义-如果我手动查看数据并搜索具有light_ intensity数据的实体,并像这样对其进行硬编码。

light_ intensity = data["entity"][222]["sensor_data"]["light_intesity"]
logger.debug("Devcie 222 light_intesity: %s lums", light_intesity)

返回:

Device 222 light_intensity: 88 lums

这告诉我,我可以从确实有购买数据的实体那里得到KeyError的实体读取数据。我正在尝试进行某种意义上的搜索,以使我能够找到哪些设备的读数百分比较低,并使用该数据,并跳过当前未发送该数据的设备。

1 个答案:

答案 0 :(得分:1)

  

未定义“ light_intesity”的键错误

首先,您拼写的 intensity 错误,并且light_intensity的值如果是字典列表,则不会是in data["entity"],但是强度仅仅是一个号码。

但是,如果要遍历所有元素并且不确定它们是否存在,请使用dict.get(key, default)

for i, e in enumerate(data.get("entity", [])):
    sensor_data = e.get("sensor_data", dict())
    light_intensity = sensor_data.get("light_intensity", None)
    logger.debug("Device %d ; light_intensity: %s lums", i, light_intensity)