Как получить конкретные данные из вывода JSON? - PullRequest
0 голосов
/ 15 мая 2019

Я работал над простым веб-приложением о погоде, используя флешку и python.

Один из маршрутов в моем файле main.py - это маршрут погоды. Он имеет функцию, которая вызывает API погоды и печатает вывод JSON.

Моя проблема заключается в извлечении определенных данных из вывода json. Вот как выглядит результат:

{'base': 'stations',
 'clouds': {'all': 90},
 'cod': 200,
 'coord': {'lat': 40.73, 'lon': -73.99},
 'dt': 1557824237,
 'id': 5128581,
 'main': {'humidity': 93,
          'pressure': 1009,
          'temp': 43.93,
          'temp_max': 46,
          'temp_min': 42.01},
 'name': 'New York',
 'sys': {'country': 'US',
         'id': 4026,
         'message': 0.0144,
         'sunrise': 1557826807,
         'sunset': 1557878678,
         'type': 1},
 'visibility': 12874,
 'weather': [{'description': 'mist', 'icon': '50n', 'id': 701, 'main': 'Mist'},
             {'description': 'light intensity drizzle',
              'icon': '09n',
              'id': 300,
              'main': 'Drizzle'}],
 'wind': {'deg': 20, 'speed': 8.05}}

Я использовал pprint, чтобы сделать его немного более читабельным. То, что я пытаюсь сделать, это извлечь данные «описания», создав словарь Python.

weather = {
    'city': city,
    'temperature': r['main']['temp'],
    'description': r['weather'][1]['description'],
    'icon': r['weather'][1]['icon'],
    }

Когда я печатаю погоду, я ожидаю, что она распечатает description: light intensity drizzle, icon: 09n, id:300, но я получаю ошибку ключа. Я не получаю ключевую ошибку, когда использую «0» вместо «1», но я пытаюсь получить вторые данные описания, а не первые. Есть предложения?

1 Ответ

1 голос
/ 15 мая 2019

Попробуйте позвонить по клавише weather, затем используйте индексы, чтобы попасть в список, затем перейдите к нужным элементам.

data = {'base': 'stations',
 'clouds': {'all': 90},
 'cod': 200,
 'coord': {'lat': 40.73, 'lon': -73.99},
 'dt': 1557824237,
 'id': 5128581,
 'main': {'humidity': 93,
          'pressure': 1009,
          'temp': 43.93,
          'temp_max': 46,
          'temp_min': 42.01},
 'name': 'New York',
 'sys': {'country': 'US',
         'id': 4026,
         'message': 0.0144,
         'sunrise': 1557826807,
         'sunset': 1557878678,
         'type': 1},
 'visibility': 12874,
 'weather': [{'description': 'mist', 'icon': '50n', 'id': 701, 'main': 'Mist'},
             {'description': 'light intensity drizzle',
              'icon': '09n',
              'id': 300,
              'main': 'Drizzle'}],
 'wind': {'deg': 20, 'speed': 8.05}}


print(data.get('weather')[0].get('description'))
print(data.get('weather')[0].get('icon'))
print(data.get('weather')[0].get('id'))
...