【问题标题】:TypeError: string indices must be integers while fetching data from APITypeError:从 API 获取数据时,字符串索引必须是整数
【发布时间】:2015-02-08 12:48:05
【问题描述】:

我正在尝试从 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

如果从item['name'] 中删除['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"}

【问题讨论】:

  • 您应该展示一个数据示例。似乎data['company'] 是字符串列表,而不是字典列表。

标签: python json api typeerror


【解决方案1】:

company 是单个字典,而不是列表。所以你不需要遍历它:只需要print data['company']['name']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 2021-03-28
    • 2021-04-28
    • 2020-06-24
    • 2016-03-26
    • 2017-09-07
    • 2018-08-19
    相关资源
    最近更新 更多