Python - 用于提取JSON响应项的基本命令

时间:2013-04-30 09:50:01

标签: python json

我只有几天的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'}]}

我想为随后的网址调用提取scoreId,即IMSLP01056,但我正在努力使用正确的命令。当我尝试:

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

返回的日志错误是:

  

TypeError:list indices必须是整数,而不是str

如果我尝试:

print dict[4][1]

它返回

KeyError: (4,)

我已尝试过各种JSONloads命令但无法正常工作。我总是遇到错误:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

请注意,items列表中可能包含许多项目,而上述内容仅为您提供第一项:您可能希望将所有项目都放在一个列表中:

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

将迭代所有项目,并将其分数提取到单独的列表中。

此外,正如larsmans所说,不要使用dict(或list)作为变量名称,因为它会隐藏内置的dict()函数。