Green Files

Why am I seeing "TypeError: string indices must be integers"?

Day: 06/02/2022 - Time: 16:45:17

I'm playing with both learning Python and am trying to get GitHub issues into a readable form. Using the advice on How can I convert JSON to CSV?, I came up with this:

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"]])

Where "issues.json" is the JSON file containing my GitHub issues. When I try to run that, I get

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

What am I missing here? Which are the "string indices"? I'm sure that once I get this working I'll have more issues, but for now, I'd just love for this to work! When I tweak the for statement to simply

for item in data: print item

what I get is ... "issues" -- so I'm doing something more basic wrong. Here's a bit of my JSON content:

{"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...

when I print data, it looks like it is getting munged really oddly:

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

Solution

The variable item is a string. An index looks like this:

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

The above example uses the 0 index of the string to refer to the first character.

Strings can't have string indices (like dictionaries can). So this won't work:

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

Reference:

https://stackoverflow.com/questions/6077675/why-am-i-seeing-typeerror-string-indices-must-be-integers

GO UP
GO TO INDEX