首页 > 解决方案 > 如果数据存在,JSON 会做一些事情,如果不存在,则做其他事情

问题描述

我有一个 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_强度'没有定义 - 如果我手动查看数据并搜索一个确实有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从那些没有购买的实体中获取数据。我正在尝试在某种意义上创建搜索,使我能够找到哪些设备的读数百分比较低并使用该数据并跳过当前未发送该数据的设备。

标签: pythonjsonsorting

解决方案


未定义“light_intesity”的 KeyError

首先,您拼写了强度错误,如果那是一个字典列表,则该值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)

推荐阅读