简体   繁体   English

Python - 访问JSON元素

[英]Python - Accessing JSON element

I am trying retrieve weather forecasting from DarkSky using their API with the code below. 我正在尝试使用他们的API以及下面的代码从DarkSky检索天气预报。 I am interested only in the part of hourly forecasting data: 我只对每小时预测数据的部分感兴趣:

url="https://api.darksky.net/forecast/api_key/33.972386,-84.231986"
response = requests.get(url)
data = response.json()
data

Here is the part of JSON data I get from data pull: 以下是我从数据提取获得的JSON数据的一部分:

{'latitude': 33.972386,
 'longitude': -84.231986,
 'timezone': 'America/New_York',
 'currently': {'time': 1553052005,
  'summary': 'Clear',
  'icon': 'clear-night',
  'nearestStormDistance': 23,
  'nearestStormBearing': 169,
  'precipIntensity': 0,
  'precipProbability': 0,
  'temperature': 43.69,
  'apparentTemperature': 43.69,
  'dewPoint': 25.61,
  'humidity': 0.49,
  'pressure': 1026.37,
  'windSpeed': 1.42,
  'windGust': 4.94,
  'windBearing': 79,
  'cloudCover': 0,
  'uvIndex': 0,
  'visibility': 3.86,
  'ozone': 309.99},
 'minutely': {'summary': 'Clear for the hour.',
  'icon': 'clear-night',
  'data': [{'time': 1553052000, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052060, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052120, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052180, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052240, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052300, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052360, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052420, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052480, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052540, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052600, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052660, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052720, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052780, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052840, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052900, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553052960, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053020, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053080, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053140, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053200, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053260, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053320, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053380, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053440, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053500, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053560, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053620, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053680, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053740, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053800, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053860, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053920, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553053980, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054040, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054100, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054160, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054220, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054280, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054340, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054400, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054460, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054520, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054580, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054640, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054700, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054760, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054820, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054880, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553054940, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055000, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055060, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055120, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055180, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055240, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055300, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055360, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055420, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055480, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055540, 'precipIntensity': 0, 'precipProbability': 0},
   {'time': 1553055600, 'precipIntensity': 0, 'precipProbability': 0}]},
 'hourly': {'summary': 'Clear throughout the day.',
  'icon': 'clear-day',
  'data': [{'time': 1553050800,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 44.13,
    'apparentTemperature': 44.13,
    'dewPoint': 25.62,
    'humidity': 0.48,
    'pressure': 1026.33,
    'windSpeed': 1.24,
    'windGust': 4.78,
    'windBearing': 93,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 3.49,
    'ozone': 310.66},
   {'time': 1553054400,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 42.82,
    'apparentTemperature': 42.82,
    'dewPoint': 25.57,
    'humidity': 0.5,
    'pressure': 1026.44,
    'windSpeed': 1.95,
    'windGust': 5.25,
    'windBearing': 60,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 4.6,
    'ozone': 308.68},
   {'time': 1553058000,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 42.45,
    'apparentTemperature': 40.02,
    'dewPoint': 25.52,
    'humidity': 0.51,
    'pressure': 1026.39,
    'windSpeed': 4.15,
    'windGust': 8.98,
    'windBearing': 61,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 10,
    'ozone': 307.84},
   {'time': 1553061600,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 41.97,
    'apparentTemperature': 38.42,
    'dewPoint': 25.8,
    'humidity': 0.52,
    'pressure': 1025.98,
    'windSpeed': 5.52,
    'windGust': 11.44,
    'windBearing': 63,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 10,
    'ozone': 307.21},
   {'time': 1553065200,
    'summary': 'Clear',
    'icon': 'clear-night',
    'precipIntensity': 0,
    'precipProbability': 0,
    'temperature': 40.7,
    'apparentTemperature': 36.97,
    'dewPoint': 25.86,
    'humidity': 0.55,
    'pressure': 1025.88,
    'windSpeed': 5.44,
    'windGust': 10.93,
    'windBearing': 61,
    'cloudCover': 0,
    'uvIndex': 0,
    'visibility': 10,
    'ozone': 306.76},

Now this is bit complex json file and I have tried using json_normalize on hourly part of json file: 现在这是一个有点复杂的json文件,我尝试在json文件的每小时部分使用json_normalize:

json_normalize(data['hourly'])

but im getting the the response like this: 但我得到这样的回应:

        data    icon    summary
0   [{'time': 1553050800, 'summary': 'Clear', 'ico...   clear-day   Clear 
    throughout the day.

Any idea how do I access the temperature and pressure on hourly data part? 我知道如何获取每小时数据部分的温度和压力? So i need to get time, temperature, pressure and humidity for every hour available. 所以我需要每小时获得时间,温度,压力和湿度。 Thank you 谢谢

You should be able to access the first element in the hourly data by 您应该能够访问每小时数据中的第一个元素

data['hourly']['data'][0]['humidity']

So if you iterate over data['hourly']['data'] you should be able to get the data you want. 因此,如果您迭代数据['hourly'] ['data'],您应该能够获得所需的数据。

Eg 例如

for data_point in data['hourly']['data']:
    print data_point['humidity']

You can transform the data so it contains only the values you are interested in: 您可以转换数据,使其仅包含您感兴趣的值:

Code: 码:

import requests
import json

url = 'https://api.darksky.net/forecast/api_key/33.972386,-84.231986'
response = requests.get(url)
data = response.json()
fields = ['time', 'temperature', 'pressure', 'humidity']
transformed = [
    {
        field: rec.get(field)
        for field
        in fields
    }
    for rec
    in data['hourly']['data']
]

print(json.dumps(transformed, indent=4))

Output: 输出:

[
    {
        "time": 1553050800,
        "temperature": 44.13,
        "pressure": 1026.33,
        "humidity": 0.48
    },
    {
        "time": 1553054400,
        "temperature": 42.82,
        "pressure": 1026.44,
        "humidity": 0.5
    },
    {
        "time": 1553058000,
        "temperature": 42.45,
        "pressure": 1026.39,
        "humidity": 0.51
    },
    {
        "time": 1553061600,
        "temperature": 41.97,
        "pressure": 1025.98,
        "humidity": 0.52
    },
    {
        "time": 1553065200,
        "temperature": 40.7,
        "pressure": 1025.88,
        "humidity": 0.55
    }
]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM