2017-01-04 43 views
1

您好,当我学习Python的我被阻以下问题,我一直在尝试,通过现场没有人对一些解决方案工程至今。当我编译时,它返回我:字符串索引必须是整数。 你能帮我吗?谢谢。蟒蛇JSON错误:字符串索引必须是整数

import json 
import urllib 

url = raw_input('Enter location: ') 
uh = urllib.urlopen(url) 
data = uh.read() 

print 'Retrieving', url 
print 'Retrieved', len(data), 'characters' 
info = json.loads(data) 
#print 'User count:', len(info) 
s = 0 

for item in info: 
    print item["comments"]["count"] 

URL包括像这样

{ 
    "note":"This file contains the sample data for testing", 
    "comments":[ 
    { 
     "name":"Romina", 
     "count":97 
    }, 
    { 
     "name":"Laurie", 
     "count":97 
    }, 
    { 
     "name":"Bayli", 
     "count":90 
    }, 
    { 
     "name":"Siyona", 
     "count":90 
    }, 
    { 
     "name":"Taisha", 
     "count":88 
    }, 
    { 
     "name":"Ameelia", 
     "count":87 
    },} 

回答

0

您应该使用print item["comments"][0]["count"]print item["comments"][1]["count"]等。您应该使用切片的索引,然后从字典中搜索"count"的值。

可以,另外,使用这样的:

for item in info["comments"]: 
    print item["count"] 
+1

非常感谢!我之前不明白 –

+0

欢迎。你也可以用不同的方式提取这些类型的值。如果你想我可以编辑我的答案。 –

3

for循环不匹配的数据结构。

试试这个:如果你想看到的名字,以计数的关联

for item in info["comments"]: 
    print item["count"] 

,尝试:

for item in info["comments"]: 
    print item["name"], item["count"] 

如果你想看到的名称,数量,以及它们在该位置列表,请尝试:

for index, item in enumerate(info["comments"]): 
    print index, item["name"], item["count"] 
+0

非常感谢!有用! –

0

您遍历解析字典中的每个值,即您的item个S IN info

  • "This file contains the sample data for testing"
  • [ { "name":"Romina", "count":97 }, { "name":"Laurie", "count":97 }, { "name":"Bayli", "count":90 }, { "name":"Siyona", "count":90 }, { "name":"Taisha", "count":88 }, { "name":"Ameelia", "count":87 }, ... ]

因此,在第一次迭代中,试图从实际的字符串得到["comments"]["count"]

如果你想打印计数为每个评论元素,那么你应该比较: for item in info["comments"]: print item["count"]

调试的最好的办法是,只使用解释器(IPython的或Jupyter笔记本电脑是这个非常好),分配页面变量,甚至创建一个具有相同结构的模拟对象,然后解析它,以验证代码的正确性。问题在于代码被解析的方式。

+0

谢谢,这很清楚 –

相关问题