2016-04-21 3 views
0

Я пишу программу на Python, чтобы запросить URL-адрес, прочитать данные JSON с этого URL-адреса, используя urllib, а затем проанализировать и извлечь количество комментариев из данных JSON, вычислить сумму номеров в файле и введите сумму ниже. Вот мой код:TypeError: строковые индексы должны быть целыми числами для JSON

import urllib 
import json 

total = 0 
url = open("comments_42.json") 
print 'Retrieving', url 
#uh = urllib.urlopen(url) 
data = url.read() 
print 'Retrieved',len(data),'characters' 
#print data 

info = json.loads(data) 
print info 
print 'User count:', len(info) 


for item in info: 
    print item['count'] 
    total = total + item['count'] 

print total 

Ошибка я получаю это:

TypeError: string indices must be integers" for "print item['count'] 

Почему они должны быть целыми числами? Мой инструктор по Курсере сделал аналогичную вещь. Любой совет?

JSON файл имеет такую ​​структуру:

{ 
    comments: [ 
    { 
     name: "Matthias" 
     count: 97 
    }, 
    { 
     name: "Geomer" 
     count: 97 
    } 
    ... 
    ] 
} 
+0

Аналогично, не то же самое. Скорее всего, это словарь, где ключ может быть любого (хешируемого) типа. – Reti43

+0

Кажется, что 'item' является' string', а не 'dict'. – AKS

+0

все остальное равное, а не плохая идея, чтобы узнать, действительно ли ваш json действительно json. http://jsonlint.com/ говорит, что это не так. –

ответ

0

Ошибка "TypeError: string indices must be integers" for "print item['count']" говорит, что item является строкой; в этом случае это ключ словаря.

Я не видел вашего JSON, но если ваш «comments_42.json» является this dataset, попробуйте код ниже:

total = 0 
for item in info["comments"]: 
    print item['count'] 
    total += item["count"] 

я нашел его here (возможно, кто-то решил эту проблему или то, что есть и загружено решение)

+0

Я просто попробовал это, и я получаю ту же ошибку. – abadila123

+0

Хорошо, поэтому я попробовал ваш код, и это происходит «ImportError: без модуля с запросами». – abadila123

+0

@ abadila123 'request' требуется только для получения набора данных в Интернете. Кажется, у вас это на компьютере, поэтому вы можете удалить это. Проверьте мой обновленный ответ. Btw. мы могли бы решить это через минуту, если вы разместили json или некоторые из них в своем вопросе – jDo

0

Это говорит о том, что элемент является строкой, что означает, что ваша структура JSON не похожа на ту, что вы использовали в своем курсе. Например

info = ['the', 'items', 'inside', 'this', 'list', 'are', 'strings'] 

for item in info: 
    # Items here are strings (the, information, etc) 
    print(items) # this will print each word in the list 




info = {'sentence': 'the', 'items', 'inside', 'this', 'list', 'are', 'strings'} 

for items in info: 
    # This is a dictionary, which can be addressed by the key name 
    print(items['sentence']) # this is what you're expecting, because 'sentence' is a dictionary key. 

Если добавить ваш ответ JSON к первоначальному вопросу, мы можем помочь вам понять, как получить доступ элементы, которые вы хотите.

Смежные вопросы