TypeError:尝试使用Python从API中提取数据时,字符串索引必须是整数

时间:2016-05-13 14:05:57

标签: python json

我是编程新手,我遇到以下问题:

我有一个非常简单但也许毫无意义的任务,我试图从JSON API获取经度和纬度数据并写入CSV文件。我已将代码基于另一个似乎正常工作的代码。

我一直收到以下错误代码:

  

c.writerow([item ['latitude']])_ TypeError:字符串索引必须是   整数

任何人都可以帮助我吗?

http://api.open-notify.org/iss-now.json

中的JSON代码
{
  "iss_position": {
    "latitude": 17.03894678089794, 
    "longitude": 1.17550020887323
  }, 
  "message": "success", 
  "timestamp": 1463137065
}

我的Python代码

import requests
import csv

r = requests.get("http://api.open-notify.org/iss-now.json").json()

c = csv.writer(open("ISS.csv", "w"),lineterminator='\n')

for item in r['iss_position']:

    c.writerow([item['latitude'],['longitude']])

错误消息

C:\Python35\python.exe C:/Users/Ian/PycharmProjects/ISS/ISS.py
Traceback (most recent call last):
  File "C:/Users/Ian/PycharmProjects/ISS/ISS.py", line 10, in <module>
    c.writerow([item['latitude']])
TypeError: string indices must be integers

Process finished with exit code 1

1 个答案:

答案 0 :(得分:2)

分配给iss_position键(r['iss_position'])的值是字典。因此,迭代它将产生键(字符串)而不是值(坐标)。在这种情况下似乎会这样做:

c.writerow([r['iss_position']['latitude'],r['iss_position']['longitude']])

不再需要for循环。在'iss_position'键下的字典中有两个键,因此循环变为两次。只需调用上面的代码就足够了。