1

JSONファイルからオブジェクトの配列にアクセスしようとするときに、なぜ `.get('key') を使用しなければならないのか混乱しています

req = urllib2.Request("http://website.com/entertainment/entertainment_news.json", None)
opener = urllib2.build_opener()
f = opener.open(req)
stories = json.load(f)
for new_story in stories:
    #Why can't I access variables using
    new_story.title

    #I have to do
    new_story.get('title')
4

3 に答える 3

7

あなたの問題は、jsonモジュールが JSON オブジェクトを解析するときに Python を返すことですdict。これは、手元のデータに対して Python でより適切なデータ構造です。

これは、フィールドにアクセスしようとするのではなく、 の項目にアクセスすることを意味しますdictdicts のアイテム (または のdictようなオブジェクト)にアクセスするための Python 構文は次のとおりです。

dict[name]

だからあなたの場合:

new_story['title']

詳細については、 sのドキュメントをdict参照してください。

この関数を使用すると、キーが存在しない場合にdict.get()デフォルト値 (デフォルトで問題は、値を取得して後で使用しようとするとエラーが発生することです)。NoneKeyErrorNone

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)
    ...
于 2013-02-08T17:52:10.440 に答える
0

new_story['title'] を使用する必要があるため、このキーが存在しない場合は例外がスローされます

于 2013-02-08T17:52:11.613 に答える