Reputation: 2032
I have a Google Spreadsheet that I'd like to get in Python, then process it through JSON. It's halfway working, and after looking through Stackoverflow for several hours, I think it's time to ask a question.
For example, the format of the JSON file looks like this (from https://developers.google.com/gdata/docs/json).
{
"version": "1.0",
"encoding": "UTF-8",
"feed": {
"xmlns": "http://www.w3.org/2005/Atom",
"xmlns$openSearch": "http://a9.com/-/spec/opensearchrss/1.0/",
"xmlns$gd": "http://schemas.google.com/g/2005",
"xmlns$gCal": "http://schemas.google.com/gCal/2005",
"id": {"$t": "..."},
"updated": {"$t": "2006-11-12T21:25:30.000Z"},
"title": {
"type": "text",
"$t": "Google Developer Events"
},
"subtitle": {
"type": "text",
"$t": "The calendar contains information about upcoming developer
conferences at which Google will be speaking, along with other
developer-related events."
},
"link": [{
"rel": "...",
"type": "application/atom+xml",
"href": "..."
},{
"rel": "self",
"type": "application/atom+xml",
"href": "..."
}],
"author": [{
"name": {"$t": "Google Developer Calendar"},
"email": {"$t": "[email protected]"}
}],
"generator":{
"version": "1.0",
"uri": "http://www.google.com/calendar",
"$t": "Google Calendar"
},
"openSearch$startIndex": {"$t": "1"},
"openSearch$itemsPerPage": {"$t": "25"},
"gCal$timezone": {"value": "America/Los_Angeles"},
"entry": [{
"id": {"$t": "..."},
"published": {"$t": "2006-11-12T21:25:30.000Z"},
"updated": {"$t": "2006-11-12T21:25:30.000Z"},
"category": [{
"scheme": "...",
"term": "..."
}],
"title":{
"type": "text",
"$t": "WebmasterWorld PubCon 2006: Google Developer Tools in General"
},
"content": {
"type": "text",
"$t": "Google is sponsoring at
<a href=\"http://www.pubcon.com/\">WebmasterWorld PubCon 2006</a>.
\n Come and visit us at the booth or join us for an evening demo
reception where we will be talking \"5 ways to enhance your website
with Google Code\". \n After all, \n it is Vegas, baby! See you soon."
},
"link": [{
"rel": "alternate",
"type": "text/html",
"href": "...",
"title": "alternate"
},{
"rel": "self",
"type": "application/atom+xml",
"href": "..."
}],
"author": [{
"name": {"$t": "Google Developer Calendar"},
"email": {"$t": "[email protected]"}
}],
"gd$transparency": {"value": "http://schemas.google.com/g/2005#event.opaque"},
"gd$eventStatus": {"value": "http://schemas.google.com/g/2005#event.confirmed"},
"gd$comments": {"gd$feedLink": {"href": "..."}},
"gCal$sendEventNotifications": {"value": "true"},
"gd$when": [{
"startTime": "2006-11-15",
"endTime": "2006-11-17",
"gd$reminder": [{"minutes": "10"}]
}],
"gd$where": [{"valueString": "3150 Paradise Road,Las Vegas,NV 89109"}]},
}]
}
}
My Python code is as follows:
import requests, json
r = requests.get('link-to-google-spreadsheet-json')
j = r.json()
Testing the top-level hierarchy of the JSON file outputs as follows:
>>> print j["version"]
1.0
But iterating over the objects, like so:
for feed in j["feed"]:
for entry in feed["entry"]:
for title in entry["title"]:
print title["$t"]
print
print
Gives me the following error:
Traceback (most recent call last):
File "<console>", line 2, in <module>
TypeError: string indices must be integers.
It sounds like it wants to print a single letter from the string, provided I give the index number. So how do I parse the JSON so that it correctly outputs what I want (e.g. feed -> entry -> title -> $t)?
Upvotes: 3
Views: 29983
Reputation: 10187
feed
and title
are dictionaries not lists so you should not have for-loop over them. You only need one for-loop that is for the entry-list.
Upvotes: 0
Reputation: 3631
j['feed'] is a dictionary. Your code should look like:
for entry in j['feed']['entry']:
print entry['title']['$t']
Upvotes: 9