python - 如果数据存在,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
从那些没有购买的实体中获取数据。我正在尝试在某种意义上创建搜索,使我能够找到哪些设备的读数百分比较低并使用该数据并跳过当前未发送该数据的设备。
解决方案
未定义“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)
推荐阅读
- javascript - AssemblyScript:动态本地数组大小
- javascript - Highcharts:如何通过单击和拖动绘制线段而没有图表滚动?
- powershell - 异常的 PowerShell 返回值
- azure-devops - 天蓝色发布管道上的错误:在满足指定要求的池“某些池”中找不到代理:Agent.Version -gtVersion 2.155.1
- cassandra - 使用 yaml 文件作为用户配置文件时,cassandra-stress 工具抛出错误
- sql - 有没有办法根据单元格值检索表列名?
- yii2 - 无法实例化组件或类
- javascript - 为什么 redux State 没有更新?
- python - 试图从字符串python中得到两个浮点数
- laravel - 如何从移动设备上使用 Google/Apple 帐户登录的用户获取访问令牌?