Python和JSON-TypeError列表索引必须是整数而不是s

2024-05-18 21:23:30 发布

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

我正在学习使用Python和API(特别是这个世界杯API,http://www.kimonolabs.com/worldcup/explorer

JSON数据如下:

[
  {
    "firstName": "Nicolas Alexis Julio",
    "lastName": "N'Koulou N'Doubena",
    "nickname": "N. N'Koulou",
    "assists": 0,
    "clubId": "5AF524A1-830C-4D75-8C54-2D0BA1F9BE33",
    "teamId": "DF25ABB8-37EB-4C2A-8B6C-BDA53BF5A74D",
    "id": "D9AD1E6D-4253-4B88-BB78-0F43E02AF016",
    "type": "Player"
  },

 {
    "firstName": "Alexandre Dimitri",
    "lastName": "Song-Billong",
    "nickname": "A. Song",
    "clubId": "35BCEEAF-37D3-4685-83C4-DDCA504E0653",
    "teamId": "DF25ABB8-37EB-4C2A-8B6C-BDA53BF5A74D",
    "id": "A84540B7-37B6-416F-8C4D-8EAD55D113D9",
    "type": "Player"
  },
   ]

我只是想打印这个API中的所有名字。以下是我所拥有的:

import urllib2
import json

url = "http://worldcup.kimonolabs.com/api/players?apikey=xxx"
json_obj = urllib2.urlopen(url).read
readable_json = json.dumps(json_obj)
playerstuff = readable_json['firstName']
for i in playerstuff:
    print i['firstName']

但是当我运行它时,我得到错误“…第8行,in…TypeError:列表索引必须是整数,而不是str”

我四处寻找解决方案,但似乎找到了一些问题,以更“深入”的API问题,我还没有真正理解它,所以任何帮助或解释我需要做什么将是惊人的。谢谢您!


Tags: comapiidjsonhttpnicknamefirstnamelastname
1条回答
网友
1楼 · 发布于 2024-05-18 21:23:30

首先,您应该使用json.loads,而不是json.dumpsloads将JSON源文本转换为Python值,而dumps则相反。

修复之后,根据问题顶部的JSON片段,readable_json将是一个列表,因此readable_json['firstName']没有意义。获取列表中每个元素的'firstName'字段的正确方法是删除playerstuff = readable_json['firstName']行并将for i in playerstuff:更改为for i in readable_json:

网友
2楼 · 发布于 2024-05-18 21:23:30

您可以将代码简化为

url = "http://worldcup.kimonolabs.com/api/players?apikey=xxx"
json_obj = urllib2.urlopen(url).read
player_json_list = json.loads(json_obj)
for player in readable_json_list:
    print player['firstName']

您试图使用字典语法访问列表元素。相当于

foo = [1, 2, 3, 4]
foo["1"]

当你有字典列表并且保持嵌套的顺序时,这可能会让你感到困惑。

网友
3楼 · 发布于 2024-05-18 21:23:30

我解决了改变

readable_json['firstName']

readable_json[0]['firstName']

相关问题 更多 >

    热门问题