在Python中迭代和打印JSON对象

2024-06-02 06:03:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Google电子表格,我想在Python中得到,然后通过JSON处理它。工作到一半了,看了几个小时Stackoverflow,我想是时候问个问题了。

例如,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": "developer-calendar@google.com"}
    }],
    "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": "developer-calendar@google.com"}
      }],
      "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"}]},
    }]
  }
}

我的Python代码如下:

import requests, json
r = requests.get('link-to-google-spreadsheet-json')
j = r.json()

测试JSON文件输出的顶级层次结构,如下所示:

>>> print j["version"]
1.0

但是在对象上迭代,就像这样:

for feed in j["feed"]:
    for entry in feed["entry"]:
        for title in entry["title"]:
            print title["$t"]
        print
    print

给出以下错误:

Traceback (most recent call last):
File "<console>", line 2, in <module>
TypeError: string indices must be integers.

听起来好像是想从字符串中打印一个字母,只要我给出索引号。那么,我如何解析JSON以便它正确地输出我想要的内容(例如feed-&g t;entry->;title->;$t)?


Tags: textincomjsonhttptitlefeedtype
2条回答

j['feed']是一本字典。您的代码应该如下所示:

for entry in j['feed']['entry']:
    print entry['title']['$t']

feedtitle是字典而不是列表,因此您不应该对它们进行for循环。您只需要一个用于条目列表的for循环。

相关问题 更多 >