в Python 3, как я могу нарезать данные JSON, когда все объекты начинаются с одинакового имени?

У меня есть строка JSON, которая возвращает информацию об устройстве, и если устройства будут найдены, устройства будут перечислены как device0, device1, device2 и т. Д. В этом простом коде ниже, как я могу обнаружить все устройства, найденные в JSON, а затем распечатать информация ниже для каждого устройства? В настоящее время я статически просматриваю каждое устройство и хочу, чтобы это обнаружение было динамичным, и печатаю результаты для каждого найденного устройства.

r1 = requests.get(url = url_api, params = PARAMS)

devicedata = r1.json()

if 'device0' in devicedata:
        print('')
        device0Name = (devicedata['device0']['device_name'])
        print(device0Name)
        print('Temp: {}'.format (devicedata['device0']['obs'][0]['ambient_temp']))
        print('Probe Temp: {}'.format (devicedata['device0']['obs'][0]['probe_temp']))
        print('Humidity: {}%'.format (devicedata['device0']['obs'][0]['humidity']))
        print('')

# Информация JSON выглядит следующим образом ...

{'device0': {'success': True, 'device_type': 'TX60', 'obs': [{'device_id': 񟟇', 'device_type': 'TX60', 'u_timestamp': �', 'ambient_temp': ཀྵ.7', 'probe_temp': ཀྵ.5', 'humidity': ྎ', 'linkquality': 颼', 'lowbattery': Ɔ', 'success': Ə', 's_interval': ྟ', 'timestamp': Ƈ/29/2020 11:10 PM', 'utctime': 1580361017}], 'alerts': {'miss': {'id': �', 'alert_type': 'miss', 's_id': 񟟇', 'max': '-100', 'min': ཚ', 'wet': Ɔ', 'alert_id': Ƈ', 'phone': 'yes', 'email': '', 'state': None}, 'batt': {'id': �', 'alert_type': 'batt', 's_id': 񟟇', 'max': '-100', 'min': '-100', 'wet': Ɔ', 'alert_id': Ƈ', 'phone': 'yes', 'email': '', 'state': None}}, 'ispws': 0, 'unit': {'temp': '°F', 'temp2': '°F', 'rh': '%'}, 'device_id': 񟟇', 'expired': Ɔ', 'interval': ཚ', 'reg_date': 񟭔-01-17 22:06:48', 'create_date': 1579298808, 'device_name': 'Back Yard', 'assocGateway': Ƈ', 'problem': False}, 'device1': {'success': True, 'device_type': 'TX60', 'obs': [{'device_id': 񟰞', 'device_type': 'TX60', 'u_timestamp': �', 'ambient_temp': ཻ.6', 'probe_temp': 'N/C', 'humidity': ོ', 'linkquality': 颼', 'lowbattery': Ɔ', 'success': Ə', 's_interval': ྟ', 'timestamp': Ƈ/29/2020 10:58 PM', 'utctime': 1580360303}], 'alerts': {'miss': {'id': �', 'alert_type': 'miss', 's_id': 񟰞', 'max': '-100', 'min': ཚ', 'wet': Ɔ', 'alert_id': Ƈ', 'phone': 'yes', 'email': '', 'state': None}, 'batt': {'id': �', 'alert_type': 'batt', 's_id': 񟰞', 'max': '-100', 'min': '-100', 'wet': Ɔ', 'alert_id': Ƈ', 'phone': 'yes', 'email': '', 'state': None}}, 'ispws': 0, 'unit': {'temp': '°F', 'temp2': '°F', 'rh': '%'}, 'device_id': 񠁵', 'expired': Ƈ', 'interval': ཚ', 'reg_date': 񟭐-03-19 01:45:04', 'create_date': 1500868369, 'device_name': 'Crawl Space', 'assocGateway': Ƈ', 'problem': False}, 'device2': {'success': True, 'device_type': 'TX60', 'obs': [{'device_id': 񠁵', 'device_type': 'TX60', 'u_timestamp': �', 'ambient_temp': ྂ.2', 'probe_temp': 'N/C', 'humidity': ཬ', 'linkquality': 颼', 'lowbattery': Ɔ', 'success': Ə', 's_interval': ྟ', 'timestamp': Ƈ/29/2020 10:56 PM', 'utctime': 1580360195}], 'alerts': None, 'ispws': 0, 'unit': {'temp': '°F', 'temp2': '°F', 'rh': '%'}, 'device_id': 񠁵', 'expired': Ɔ', 'interval': ཋ', 'reg_date': 񟭔-01-30 04:34:00', 'create_date': 1580358840, 'device_name': 'Basement', 'assocGateway': ƈ', 'problem': False}, 'tz': 'America/Chicago'}

Выход для одного устройства выглядит следующим образом.

Back Yard
Temp: 50.9
Probe Temp: 51.2
Humidity: 92%


Crawl Space
Temp: 65.4
Probe Temp: N/C
Humidity: 55%


Basement
Temp: 70
Probe Temp: N/C
Humidity: 48%

Всего 1 ответ


Нашел это.

for devKey in devicedata.keys():
    if "device" in devKey:
        dev = devicedata[devKey]
        name = dev["device_name"]
        obs = dev["obs"][0]
        temp = obs["ambient_temp"]
        probeTemp = obs["probe_temp"]
        humidity = obs["humidity"]
        print(name)
        print('Temp: {}'.format(temp))
        print('Probe Temp: {}'.format(probeTemp))
        print('Humidity: {}%'.format(humidity))
        print('') 

Есть идеи?

10000