2016-10-06 2 views
0

Ich verwende urllib.request.urlopen eine JSON-Antwort zu erhalten, die wie folgt aussieht:Verfahrgeschwindigkeit json Array in Python

{ 
"batchcomplete": "", 
"query": { 
    "pages": { 
     "76972": { 
      "pageid": 76972, 
      "ns": 0, 
      "title": "Title", 
      "thumbnail": { 
       "original": "https://linktofile.com" 
      } 
     } 
    } 
} 

Der entsprechende Code, um die Antwort zu erhalten:

response = urllib.request.urlopen("https://example.com?title="+object.title) 
data = response.read() 
encoding = response.info().get_content_charset('utf-8') 
json_object = json.loads(data.decode(encoding)) 

I Ich versuche, den Wert von "Original" zu finden, aber es fällt mir schwer, dorthin zu gelangen. Ich kann print(json_object['query']['pages'] tun, aber sobald ich print(json_object['query']['pages'][0] ich laufe in einen KeyError: 0.

Wie würde ich in der Lage sein, mit Python, den Wert von original abrufen?

Antwort

2

Tun Sie dies statt:

my_content = json_object['query']['pages']['76972']['thumbnail']['original'] 

Der Grund dafür ist, müssen Sie index als [0] nur erwähnen, wenn Sie die Liste als Objekt haben. Aber in Ihrem Fall ist jeder Artikel von dict Typ. Sie müssen key statt index

angeben Wenn Zahl dynamisch ist, können Sie tun:

page_content = json_object['query']['pages'] 
for content in page_content.values(): 
    my_content = content['thumbnail']['original'] 

wo my_content die erforderlichen Informationen ist.

+0

Die Zahl dynamisch ist, so dass ich - leider - dies nicht tun können. – MagnusD

+0

Ist das mit Python2 nutzbar? – MagnusD

+0

Ja ist es. Ich benutze Python 2.7 und es wird von ihm unterstützt –

0

Doing [0] sucht nach diesem Schlüssel - der nicht existiert. Angenommen, Sie wissen nicht immer, was der Schlüssel der Seite ist, versuchen Sie dies:

pages = json_object['query']['pages'] 
for key, value in pages.items(): # this is python3 
    original = value['thumbnail']['original'] 

Ansonsten können Sie diese einfach durch den Schlüssel greifen, wenn Sie wissen (was zu sein scheint), um die pageid:

json_object['query']['pages']['76972']['thumbnail']['original'] 
+0

Würde dies in Python 2 funktionieren? – MagnusD

0

Sie können Schlüssel iterieren:

for page_no in json_object['query']['pages']: 
    page_data = json_object['query']['pages'][page_no]