Ваша проблема в том, что, когда в json
модуль анализирует объект JSON, он возвращает Python dict
, что является более подходящей структурой данных в Python для данных.
Это означает, что вы не хотите пытаться получить доступ к полю на нем, а скорее получить доступ к элементу в dict
. Синтаксис Python для доступа к элементу из dict
с (или dict
-как объектов) является:
dict[name]
Так что в вашем случае:
new_story['title']
См the documentation for dict
s для получения дополнительной информации.
dict.get()
функция позволяет легко получить значение по умолчанию (по умолчанию None
), если ключ не существует (как правило, это произведет KeyError
. Вы обычно не хотите, чтобы это поведение (это, как правило, лучше чтобы избежать ошибки раньше, и узнать, где проблема, чем получить значение None
и получить ошибки позже, когда вы попытаетесь ее использовать).
Также обратите внимание, что это хороший прецедент для оператора with
, чтобы убедиться, что соединение закрывается должным образом. Поскольку urllib2
не поддерживает контекстных менеджеров по умолчанию, мы используем contextlib.closing()
, чтобы сделать один:
from contextlib import closing
req = urllib2.Request("http://website.com/entertainment/entertainment_news.json", None)
opener = urllib2.build_opener()
with closing(opener.open(req)) as f:
stories = json.load(f)
...
Если бы я должен был сделать это взломать (чего я бы не хотел, но я отвлекся), я бы, вероятно, сделал это, выполнив метод '__getattr __()', который просто сделал return self [key] '. –
Вы также можете выполнить 'params = type (" Параметры ", (object,), dict_with_parameters)' –