2013-04-30 55 views
1

我只有幾天的時間進入我的Python體驗,所以我很抱歉用一個嬰兒問題來污染站點。 我正在嘗試爲XBMC編寫附加組件,我相信它使用Python 2.4。我訪問過一個web API,它以JSON封裝了返回。我保存了url返回到一個WebHTML列表(我想列表!)。當我進入從計算器教程如下:Python - 用於提取JSON響應項目的基本命令

decoded = json.loads(WebHTML) 
print 'DECODED:', decoded 

我得到了我的日誌如下:

NOTICE: {u'totalItems': 1, u'query': u'Ludwig van Beethoven Op 67 Symphony No 5 in Cm (Fate)', u'kind': u'volumes#volumes', u'items': [{u'scoreId': u'IMSLP01056', u'pageCount': 42, u'title': u'Symphony No.5, Op.67 - Complete Score (S.464/5)', u'kind': u'volumes#volume', u'authors': [u'Beethoven, Ludwig van'], u'year': 1807, u'selfLink': u'http://www.peachnote.com/rest/api/v0/score?id=IMSLP01056'}]}

我想提取用於後續的URL調用,即IMSLP01056的scoreId,但我正在用正確的命令掙扎。當我嘗試:

dict = json.loads(WebHTML) 
dict['items']['scoreId'] 
print dict['items']['scoreId'] 

返回日誌錯誤是:

TypeError: list indices must be integers, not str

如果我嘗試:

print dict[4][1] 

返回

KeyError: (4,) 

我已經嘗試了各種的JSONloads命令,但不能得到任何工作。我總是得到一個錯誤開端:

IOError: (2, 'No such file or directory', '{\n "kind": "volumes#volumes",\n "query": "Ludwig ..... etc, etc.

所以,我有點難倒以正確的命令,我應該使用。感謝和抱歉,如果這是一個非常基本的問題太多的信息。

+0

print dict ['items'] [0] ['scoreId'] – spicavigo 2013-04-30 09:51:18

+3

使用'dict'作爲變量名是一個非常糟糕的主意,因爲它會隱藏內置名稱。 – 2013-04-30 09:52:00

+0

謝謝larsmans,我已將'dict'改爲'scoreId',但我仍然得到相同的錯誤。 – user2335216 2013-04-30 09:56:49

回答

2

你得到的主要反應確實是一本字典,但它的items鍵的值是一個列表。所以錯誤是告訴你爲內部查找使用整數索引。所以:

dict['items'][0]['scoreId'] 

注意,有一些items列表裏面潛在的許多項目,上述只會給你的第一:你可能希望所有的人都在一個單獨的列表:

scores = [item['scoreId'] for item in dict['items']] 

這將迭代所有項目,並將他們的分數提取到一個單獨的列表中。

此外,正如larsmans所說,不要使用dict(或list)作爲變量名,因爲它隱藏了內置的dict()函數。

+0

哦,現在它工作。對不起,我忘了修改上一行。謝謝大家 - 告訴你我是初學者!無法相信你的幫助有多快。 – user2335216 2013-04-30 10:02:47