为什么我看到“TypeError:string索引必须是整数”?

我正在玩Python和学习,并试图让github问题成为一个可读的forms。 使用关于如何将JSON转换为CSV的build议? 我想出了这个:

import json import csv f=open('issues.json') data = json.load(f) f.close() f=open("issues.csv","wb+") csv_file=csv.writer(f) csv_file.writerow(["gravatar_id","position","number","votes","created_at","comments","body","title","updated_at","html_url","user","labels","state"]) for item in data: csv_file.writerow([item["gravatar_id"], item["position"], item["number"], item["votes"], item["created_at"], item["comments"], item["body"], item["title"], item["updated_at"], item["html_url"], item["user"], item["labels"], item["state"]]) 

其中“issues.json”是包含我的github问题的json文件。 当我尝试运行时,我得到了

 File "foo.py", line 14, in <module> csv_file.writerow([item["gravatar_id"], item["position"], item["number"], item["votes"], item["created_at"], item["comments"], item["body"], item["title"], item["updated_at"], item["html_url"], item["user"], item["labels"], item["state"]]) TypeError: string indices must be integers 

我在这里错过了什么? 哪些是“string索引”? 我确信,一旦我得到这个工作,我会有更多的问题,但现在,我只是喜欢这个工作!

更新:当我调整简单的for语句

 for item in data: print item 

我得到的是…“问题” – 所以我正在做一些更基本的错误。 这是我的json的一些:

 {"issues":[{"gravatar_id":"44230311a3dcd684b6c5f81bf2ec9f60","position":2.0,"number":263,"votes":0,"created_at":"2010/09/17 16:06:50 -0700","comments":11,"body":"Add missing paging (Older>>) links... 

当我打印data ,看起来好像很奇怪:

 {u'issues': [{u'body': u'Add missing paging (Older>>) lin... 

item很可能是你的代码中的一个string; string索引是方括号中的索引,例如gravatar_id 。 所以我首先检查你的datavariables,看看你在那里收到什么; 我猜这个data是一个string列表(或者至less是一个包含至less一个string的列表),而它应该是一个字典列表。

variablesitem是一个string。 索引看起来像这样:

 >>> mystring = 'helloworld' >>> print mystring[0] 'h' 

上面的例子使用string的0索引来引用第一个字符。

string不能有string索引(就像字典一样)。 所以这不起作用:

 >>> mystring = 'helloworld' >>> print mystring['stringindex'] TypeError: string indices must be integers 

data是一个dict对象。 所以,像这样迭代它:

Python 2

 for key, value in data.iteritems(): print key, value 

Python 3

 for key, value in data.items(): print(key, value) 

这可能发生,如果一个共同的失踪。 当我有一个两元组列表时,我碰到了它,每个元组由第一个位置的一个string和第二个位置的一个列表组成。 在一个例子中,我错误地忽略了一个元组的第一个元素之后的逗号,解释者认为我试图索引第一个元素。