python
  • json
  • api
  • typeerror
  • 2014-12-10 1 views 1 likes 
    1

    Я пытаюсь получить конкретную информацию из библиотеки API,:TypeError: строковые индексы должны быть целыми числами при выборке данных из API

    import urllib2 
    import json 
    import csv 
    
    c = csv.writer(open("analysis output.csv", "wb")) 
    
    urlIncomeStatement = 'http://dev.c0l.in:5984/income_statements/_all_docs' 
    apiIncomeStatement = urllib2.urlopen(urlIncomeStatement) 
    dataIncomeStatement = json.load(apiIncomeStatement) 
    
    urlFinancialPosition = 'http://dev.c0l.in:5984/financial_positions/' 
    apiFinancialPosition = urllib2.urlopen(urlFinancialPosition) 
    dataFinancialPosition = json.load(apiFinancialPosition) 
    
    
    for item in dataIncomeStatement['rows']: 
        url = 'http://dev.c0l.in:5984/income_statements/' + item['id'] 
        api = urllib2.urlopen(url) 
        data = json.load(api) 
        for item in data['company']: 
         print item['name'] 
    

    Когда скрипт запускается, в конце концов, я получаю:

    Traceback (most recent call last): 
        File "C:\Users\gnite_000\Documents\BIT course 1\github\1415-bit-project2-parveen-group-01\extendedAPI.py", line 21, in <module> 
        print item['name'] 
    TypeError: string indices must be integers 
    

    Если ['name'] удален из item['name'], тогда скрипт отлично работает и распечатывает данные. Почему и как я могу заставить его работать? У меня точно такой же скрипт для разных API, который работает нормально.

    P.S .: Данные, которые я ищу это:

    {"_id":"30e901a7b7d8e98328dcd77c3600fa43","_rev":"1-689f7618387b071a0107a69fe24e410d","id":26,"sector":"services","company":{"name":"Abatz","non_current_assets":1300369.5,"current_assets":1323444.5900000000838,"equity":867440.68000000005122,"non_current_liabilities":376096.35999999998603,"current_liabilities":512456.94000000000233},"date":"2012-10-31"} 
    
    +1

    Вы должны показать пример данных. Похоже, что 'data ['company']' - это список строк, а не список dicts. –

    ответ

    1

    company является одной ДИКТ, а не список. Поэтому вам не нужно проходить через нее: просто сделайте print data['company']['name'].

    +0

    Спасибо, что решил мою проблему! –

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