JSON делает что-то, если данные существуют, и делает что-то другое, если их нет - PullRequest
0 голосов
/ 30 июня 2018

У меня есть API данных JSON, который содержит ~ 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 от тех, у кого их нет. Я пытаюсь создать поиск в том смысле, который позволяет мне находить, какие устройства имеют процент светлых показаний, и использовать эти данные, а также пропускать устройства, которые в данный момент не отправляют эти данные.

1 Ответ

0 голосов
/ 30 июня 2018

KeyError, что 'light_intesity' не определено

Прежде всего, вы написали интенсивность неправильно, и значение 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...