【问题标题】:How can I loop over entries in JSON?如何遍历 JSON 中的条目?
【发布时间】:2023-03-16 05:59:01
【问题描述】:

我想遍历 JSON 文件的内容并将其打印到控制台。

我想我确实把一些东西和列表搞混了。

这就是我试图获取所有team_name 元素的方法

from urllib2 import urlopen
import json

url = 'http://openligadb-json.heroku.com/api/teams_by_league_saison?league_saison=2012&league_shortcut=bl1'
response = urlopen(url)
json_obj = json.load(response)

for i in json_obj['team']:
    print i

这是我的 JSON(简体:)

{
    "team": [
        {
            "team_icon_url": "http://www.openligadb.de/images/teamicons/Hamburger_SV.gif",
            "team_id": "100",
            "team_name": "Hamburger SV"
        },
        {
            "team_icon_url": "http://www.openligadb.de/images/teamicons/FC_Schalke_04.gif",
            "team_id": "9",
            "team_name": "FC Schalke 04"
        }
    ]
}

(可在此处找到完整的 JSON 输出:Link

当然我得到一个错误,我应该在 [] 中使用整数输入,而不是字符串,但我不明白我该怎么做。

for i in json_obj['team']:
TypeError: string indices must be integers, not str

这里是response

http://openligadb-json.heroku.com/api/teams_by_league_saison?league_saison=2012&league_shortcut=bl1
<addinfourl at 139755086292608 whose fp = <socket._fileobject object at 0x7f1b446d33d0>>

我做错了什么?

【问题讨论】:

  • 你能打印response吗?
  • 我无法重现您提供的简化 JSON 摘录的问题(在修复了其中的语法错误之后)。
  • 我运行了这个,它对我有用。什么版本的 Python?
  • 也适合我。检查 json_obj 和 json_obj['team'] 的类型。尝试使用您首先粘贴的 json sn-p,禁用 HTTP 请求。它可能并不总是返回您期望的结果。
  • 我在 Ubuntu 12.04 上使用 Python 2.7.3

标签: python json


【解决方案1】:

实际上,要查询team_name,只需将其添加到最后一行的括号中即可。除此之外,它似乎可以在命令行上的 Python 2.7.3 上运行。

from urllib2 import urlopen
import json

url = 'http://openligadb-json.heroku.com/api/teams_by_league_saison?league_saison=2012&league_shortcut=bl1'
response = urlopen(url)
json_obj = json.load(response)

for i in json_obj['team']:
    print i['team_name']

【讨论】:

    【解决方案2】:

    试试这个:

    import urllib, urllib2, json
    url = 'http://openligadb-json.heroku.com/api/teams_by_league_saison?league_saison=2012&league_shortcut=bl1'
    request = urllib2.Request(url)
    request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
    request.add_header('Content-Type','application/json')
    response = urllib2.urlopen(request)
    json_object = json.load(response)
    #print json_object['results']
    if json_object['team'] == []:
        print 'No Data!'
    else:
        for rows in json_object['team']:
            print 'Team ID:' + rows['team_id']
            print 'Team Name:' + rows['team_name']
            print 'Team URL:' + rows['team_icon_url']
    

    【讨论】:

    • 嗨,模块 urllib 和 urllib2 在哪里?
    【解决方案3】:

    要解码 json,你必须传递 json 字符串。目前您正在尝试传递一个对象:

    >>> response = urlopen(url)
    >>> response
    <addinfourl at 2146100812 whose fp = <socket._fileobject object at 0x7fe8cc2c>>
    

    您可以使用response.read() 获取数据。

    【讨论】:

    • 我以为我使用 json.load 将字符串转换为 json - 请给我一个提示如何实现您的解决方案?
    猜你喜欢
    • 1970-01-01
    • 2022-06-28
    • 2018-01-02
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多