2016-10-06 3 views
0

Я использую urllib.request.urlopen, чтобы получить ответ JSON, который выглядит следующим образом:Обход массива JSON в Python

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

Соответствующий код, чтобы получить ответ:

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 «Я пытаюсь получить значение« оригинал », но мне трудно добраться туда. я могу сделать print(json_object['query']['pages'], но как только я print(json_object['query']['pages'][0] я бегу в KeyError: 0.

Как я смог бы с питоном получить значение original?

ответ

2

ли это вместо:

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

Причина заключается в том, что вам нужно упомянуть index, как [0] только тогда, когда у вас есть список как объект. Но в вашем случае каждый товар имеет тип dict. Необходимо указать key вместо index

Если число является динамическим, вы можете сделать:

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

где my_content является необходимой информации.

+0

число динамична, так что я - к сожалению - не могу это сделать. – MagnusD

+0

Используется ли это с python2? – MagnusD

+0

Да, это так. Я использую Python 2.7 и поддерживается этим –

0

Выполнение [0] ищет этот ключ - которого не существует. Предполагая, что вы не всегда знаете, что ключ страницы, попробуйте это:

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

В противном случае вы можете просто захватить его с помощью ключа, если вы знаете (что, кажется) в pageid:

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

Будет ли это работать в python 2? – MagnusD

0

Вы можете перебрать ключи:

for page_no in json_object['query']['pages']: 
    page_data = json_object['query']['pages'][page_no] 
Смежные вопросы