如何从JSON数据解析数据?

时间:2019-09-11 18:54:21

标签: python json darksky

我收到了来自DarkSky(天气API)的大量数据,我想获取"summary"的值。

它应该是JSON格式,然后我将其翻译成字典。但是,python将"data"识别为列表,而不是字典。我将如何从这些数据中获取"summary"的值?

darkSkyURL ="https://api.darksky.net/forecast/###Key has Been Removed###/{},{},{}?exclude=minutely,currently,flags,hourly".format(latitude, longitude, unixTime) #creates appropriate url, using known Long, Lang and current epoch time. These values are formatted into the url
darkSkyReport = requests.get(darkSkyURL)
darkSkyData = darkSkyReport.json()
print(darkSkyData["daily"]["data"]["summary"]))

这里解析的数据:

{
    'latitude': REMOVED,
    'longitude': REMOVED,
    'timezone': 'Europe/London',
    'daily': {
        'data': [{
            'time': 1568156400,
            'summary': 'Mostly cloudy throughout the day.',
            'icon': 'rain',
            'sunriseTime': 1568180039,
            'sunsetTime': 1568226922,
            'moonPhase': 0.43,
            'precipIntensity': 0.0059,
            'precipIntensityMax': 0.0392,
            'precipIntensityMaxTime': 1568160000,
            'precipProbability': 0.71,
            'precipType': 'rain',
            'temperatureHigh': 65.89,
            'temperatureHighTime': 1568210400,
            'temperatureLow': 53.98,
            'temperatureLowTime': 1568268000,
            'apparentTemperatureHigh': 65.89,
            'apparentTemperatureHighTime': 1568210400,
            'apparentTemperatureLow': 53.98,
            'apparentTemperatureLowTime': 1568268000,
            'dewPoint': 50.7,
            'humidity': 0.72,
            'pressure': 1016.26,
            'windSpeed': 14.02,
            'windGust': 36.33,
            'windGustTime': 1568206800,
            'windBearing': 254,
            'cloudCover': 0.54,
            'uvIndex': 4,
            'uvIndexTime': 1568203200,
            'visibility': 6.776,
            'ozone': 272.7,
            'temperatureMin': 53.14,
            'temperatureMinTime': 1568160000,
            'temperatureMax': 65.89,
            'temperatureMaxTime': 1568210400,
            'apparentTemperatureMin': 53.14,
            'apparentTemperatureMinTime': 1568160000,
            'apparentTemperatureMax': 65.89,
            'apparentTemperatureMaxTime': 1568210400
        }]
    },
    'offset': 1
}

2 个答案:

答案 0 :(得分:1)

在数据数组中建立索引,然后加载摘要对象

darkSkyURL ="https://api.darksky.net/forecast/###Key has Been Removed###/{},{},{}?exclude=minutely,currently,flags,hourly".format(latitude, longitude, unixTime) #creates appropriate url, using known Long, Lang and current epoch time. These values are formatted into the url
darkSkyReport = requests.get(darkSkyURL)
darkSkyData = darkSkyReport.json()
summary = darkSkyData["daily"]["data"][0]["summary"]

答案 1 :(得分:-2)

那是因为数据是一个列表。您必须通过抓住第一个元素将字典从列表中移出。