1

我只有几天的 Python 经验,所以很抱歉用一个小步骤问题污染了网站。我正在尝试为 XBMC 编写一个附加组件,我相信它使用 Python 2.4。我访问了一个 web api,它将返回值包装在 JSON 中。我已将 url 返回保存到 WebHTML 列表(我认为是列表!)。当我从 stackoverflow 教程中输入以下内容时:

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 调用提取 scoreId,即 IMSLP01056,但我正在努力使用正确的命令。当我尝试:

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

返回的日志错误是:

TypeError:列表索引必须是整数,而不是 str

如果我尝试:

print dict[4][1]

它返回

KeyError: (4,)

我尝试了各种 JSONloads 命令,但无法正常工作。我总是得到一个错误开始:

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

所以,我对我应该使用的正确命令有点困惑。如果这是一个非常基本的问题的信息太多,谢谢和抱歉。

4

1 回答 1

2

您得到的主要响应确实是一个字典,但它的items键值是一个列表。所以错误告诉你使用整数索引进行内部查找。所以:

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

请注意,该列表中可能有很多项目,items上面只会给您第一个:您可能希望将所有项目都放在一个列表中:

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

它将遍历所有项目,并将它们的分数提取到一个单独的列表中。

另外,正如 larsmans 所说,不要使用dict(or list) 作为变量名,因为它隐藏了内置dict()函数。

于 2013-04-30T09:56:46.497 回答