Thingspeak: Разбор ответа JSON с Python - PullRequest
0 голосов
/ 22 октября 2018

Я хотел бы создать навык Alexa, используя Python, чтобы использовать данные, загруженные датчиками в Thingspeak.Случаи, когда я использую только одно конкретное значение, довольно просты, ответ от Thingspeak - это только значение.Когда я хочу использовать несколько значений, в моем случае для суммирования атмосферного давления для определения тенденций отклик представляет собой объект json, подобный этому:

{"channel":{"id":293367,"name":"Weather Station","description":"My first attempt to build a weather station based on an ESP8266 and some common sensors.","latitude":"51.473509","longitude":"7.355569","field1":"humidity","field2":"pressure","field3":"lux","field4":"rssi","field5":"temp","field6":"uv","field7":"voltage","field8":"radiation","created_at":"2017-06-25T07:35:37Z","updated_at":"2018-08-04T12:11:22Z","elevation":"121","last_entry_id":1812},"feeds":
[{"created_at":"2018-10-21T18:11:45Z","entry_id":1713,"field2":"1025.62"}, 
 {"created_at":"2018-10-21T18:12:05Z","entry_id":1714,"field2":"1025.58"}, 
 {"created_at":"2018-10-21T18:12:25Z","entry_id":1715,"field2":"1025.56"}, 
 {"created_at":"2018-10-21T18:12:45Z","entry_id":1716,"field2":"1025.65"}, 
 {"created_at":"2018-10-21T18:13:05Z","entry_id":1717,"field2":"1025.58"}, 
 {"created_at":"2018-10-21T18:13:25Z","entry_id":1718,"field2":"1025.63"}]

Я сейчас начал с

f = urllib.urlopen(link) # Get your data
json_object = json.load(f)

for entry in json_object[0]
  print entry["field2"]

Объект json является немного рекурсивным, это список, содержащий список с элементом с массивом в качестве значения.Теперь я не совсем уверен, как перебирать значения ключа «field2» в массиве.Я новичок в Python, а также JSON.Может быть, кто-нибудь может мне помочь?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Это не имеет ничего общего с json - после того, как строка json проанализирована с помощью json.load(), вы получите простой объект python (обычно, dict, иногда список, редко - но это будет допустимо - строка, int, float, boolean или None).

это список, содержащий список с элементом с массивом в качестве значения.

На самом деле это dict с двумя ключами "channel" и "feeds".Первый имеет другое значение для значения, а второй list из dict с.Как использовать диктовки и списки подробно документировано. FWIW

Здесь значения, которые вы ищете, хранятся под клавишами «field2» в полях «feeds», поэтому вам нужно:

# get the list stored under the "feeds" key
feeds = json_object["feeds"]

# iterate over the list:
for feed in feeds:
    # get the value for the "field2" key
    print feed["field2"]
0 голосов
/ 22 октября 2018

Я только что понял, это было так, как ожидалось.Вы должны получить массив entries из dict, а затем перебрать список элементов и вывести значение на ключ field2.

# Get entries from the response
entries = json_object["feeds"]

# Iterate through each measurement and print value
for entry in entries:
  print entry['field2']
0 голосов
/ 22 октября 2018

У вас есть словарь.Используйте клавишу для доступа к значению

Пример:

json_object = {"channel":{"id":293367,"name":"Weather Station","description":"My first attempt to build a weather station based on an ESP8266 and some common sensors.","latitude":"51.473509","longitude":"7.355569","field1":"humidity","field2":"pressure","field3":"lux","field4":"rssi","field5":"temp","field6":"uv","field7":"voltage","field8":"radiation","created_at":"2017-06-25T07:35:37Z","updated_at":"2018-08-04T12:11:22Z","elevation":"121","last_entry_id":1812},"feeds":
[{"created_at":"2018-10-21T18:11:45Z","entry_id":1713,"field2":"1025.62"}, 
 {"created_at":"2018-10-21T18:12:05Z","entry_id":1714,"field2":"1025.58"}, 
 {"created_at":"2018-10-21T18:12:25Z","entry_id":1715,"field2":"1025.56"}, 
 {"created_at":"2018-10-21T18:12:45Z","entry_id":1716,"field2":"1025.65"}, 
 {"created_at":"2018-10-21T18:13:05Z","entry_id":1717,"field2":"1025.58"}, 
 {"created_at":"2018-10-21T18:13:25Z","entry_id":1718,"field2":"1025.63"}]}

for entry in json_object["feeds"]:
    print entry["field2"]

Выход:

1025.62
1025.58
1025.56
1025.65
1025.58
1025.63
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...