将JSON反序列化为python类/对象

时间:2018-07-24 05:34:08

标签: python json class object

我是python的新手,需要帮助来获取json文件并合并 将其放入要在整个类中使用的 init 中,但是下面出现了错误,我不明白为什么。我之前有一个构建类,看起来好像是一样的。

AttributeError: 'dict' object has no attribute 'zipcode'

我有一个名为config.json的单独的json文件,我在其中更改了一些信息(即位置和api键),但是除此之外,这就是我正在使用的文件。

config.json:

{
    "unit_system":"metric",

    "location_information":{
        "country_code":"US",
        "country_name":"United States",
        "city":"New York City",
        "state":"New York",
        "postal":10001
    },

    "api_keys":{
        "weather_api_key":"97a484e1039b7a0779b59f2e57e597a3"
    }
}

weather.py

class weather:
    """weather retrieving app"""

    def __init__(self, data):
        """initialize attributes for weather app"""

        self.unit_system = data['unit_system']
        #unit system

        self.country_code = data['location_information']['country_code']
        self.zipcode = data['location_information']['postal']
        #location information

        self.api_key = data['api_keys']['weather_api_key']
        #api key informaation

    def get_update(self):

        threading.Timer(5.0, w.get_update).start()
        #runs get_update every 5 seconds

        #get weather information
        weather_url = 'http://api.openweathermap.org/data/2.5/weather?zip=' \
        + str(self.zipcode) + ',' \
        + self.country_code + '&appid=' \
        + self.api_key

        weather_request = requests.get(weather_url)
        weather_data = weather_request.json()
        temp_k = float(weather_data['main']['temp'])

        #determine unit system conversions
        if self.unit_system == 'english':

            temp = (temp_k - 273.15) * 1.8 + 32

        elif self.unit_system == 'metric':

            temp = temp_k - 273.15

        print(temp)
        #return(temp)

import threading
import requests
import json

with open('config.json') as config_file:
    config = json.load(config_file)

w = weather(config)

w.get_update()

2 个答案:

答案 0 :(得分:0)

删除最后一行并将这些行放在底部。第一行创建一个名为weather_obj的天气类的实例。然后,您可以使用weather_obj

调用get_update。
weather_obj = weather(config)
weather_obj.get_update()

答案 1 :(得分:0)

您提供的密码似乎有效。 a screenshot of my output(s)