2017-01-04 191 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

謝謝,這很清楚 –

相關問題