在 Python 中迭代和打印 JSON 对象
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14089238/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Iterating and printing JSON objects in Python
提问by AAA
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.
我有一个 Google 电子表格,我想用 Python 获取它,然后通过 JSON 处理它。已经进行到一半了,看了几个小时的Stackoverflow,觉得是时候问个问题了。
For example, the format of the JSON file looks like this (from https://developers.google.com/gdata/docs/json).
例如,JSON 文件的格式如下所示(来自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:
我的Python代码如下:
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:
测试 JSON 文件输出的顶级层次结构如下:
>>> 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)?
听起来它想从字符串中打印一个字母,前提是我给出了索引号。那么如何解析 JSON 以使其正确输出我想要的内容(例如提要 -> 条目 -> 标题 -> $t)?
采纳答案by sneawo
j['feed'] is a dictionary. Your code should look like:
j['feed'] 是一本字典。您的代码应如下所示:
for entry in j['feed']['entry']:
print entry['title']['$t']
回答by Lycha
feedand titleare dictionaries not lists so you should not have for-loop over them. You only need one for-loop that is for the entry-list.
feed并且title是字典而不是列表,所以你不应该对它们进行 for 循环。您只需要一个用于条目列表的 for 循环。

