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

Python—用于提取JSON响应项的基本命令,python,json,Python,Json,我的Python体验才开始了几天,所以我很抱歉用一个小问题污染了这个网站。 我正在尝试为XBMC编写一个插件,我相信它使用的是Python 2.4。我访问了一个web api,它用JSON封装了返回。我已经将url返回保存到一个WebHTML列表(我认为是一个列表!)。当我在stackoverflow教程中输入以下内容时: decoded = json.loads(WebHTML) print 'DECODED:', decoded 我在日志中得到以下信息: 注意:{u'totalItems'

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

decoded = json.loads(WebHTML)
print 'DECODED:', decoded
我在日志中得到以下信息:

注意:{u'totalItems':1,u'query':u'Ludwig van Beethoven作品67第五交响曲Cm(命运)'u'kind':u'volumes#volumes',u'items':[{u'scoreId':u'IMSLP01056',u'pageCount:42,u'title':u'Symphony No.5,Op.67-完整乐谱(S.464/5)'u'kind':u'volumes':u'volumes"volumes#volumes##,u'authors':[u'Beethoven':,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:列表索引必须是整数,而不是str

如果我尝试:

print dict[4][1]
它回来了

KeyError: (4,)
我尝试了各种JSONloads命令,但都无法正常工作。我总是在开始时出错:

IOError:(2,'没有这样的文件或目录','{\n“种类”:“卷#卷”,\n“查询”:“路德维希……等”


因此,对于我应该使用的正确命令,我有点困惑。如果这对于一个非常基本的问题来说是太多的信息,那就表示感谢和抱歉。

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

dict['items'][0]['scoreId']
请注意,
项目
列表中可能有许多项目,上面只会给出第一个:您可能希望所有项目都在一个列表中:

scores = [item['scoreId'] for item in dict['items']]
它将遍历所有项目,并将它们的分数提取到一个单独的列表中


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

打印dict['items'][0]['scoreId']使用
dict
作为变量名是一个非常糟糕的主意,因为它会隐藏内置名称。谢谢larsmans,我已经将“dict”改为“scoreId”,尽管我仍然会遇到同样的错误。spicavigo-它仍然告诉我必须是整数而不是str。哦,现在它确实起作用了。对不起,我忘了修改前一行。谢谢大家-告诉你我是一个开始真不敢相信你这么快就帮了我。