【发布时间】:2012-03-01 20:53:27
【问题描述】:
第一次学习python,我正在阅读JSON并正确解码。我可以使用第一个 for 循环遍历名称,因此我认为我正确获取了名称的值。当我尝试将该值设置为变量时,出现以下错误。
Traceback (most recent call last):
File "./logger.py", line 70, in <module>
winnerName = jsonData['players'][winner].get('name')
TypeError: list indices must be integers, not unicode
Python 代码:
jsonData = json.load(open('file.json'))
## Functions correctly and prints each name out.
for i in range(0,7):
print jsonData['players'][i].get('name')
gameMatches = jsonData['games'][game]['matches']
for match in gameMatches:
winnerBool = 1
winner = -1
loser = -1
winnerName = ""
loserName = ""
matchCounter = 1
## Set the winner first then check to see who lost
for key, value in sorted(match.iteritems(), reverse=True):
if winnerBool:
winner = value
## This is where the error keeps pointing
winnerName = jsonData['players'][winner].get('name')
winnerBool = 0
elif winner != value:
loserName = jsonData['players'][loser].get('name')
loser = value
print winnerName
print loserName
JSON 文件:
{
"players":[
{"name":"Donatello","img":"\/img\/players\/1.jpg","rol":"\/img\/players\/r1.jpg"},
{"name":"Leonardo","img":"\/img\/players\/2.jpg","rol":"\/img\/players\/r2.jpg"},
{"name":"Michelangelo","img":"\/img\/players\/3.jpg","rol":"\/img\/players\/r3.jpg"},
{"name":"Raphael","img":"img\/players\/4.jpg","rol":"img\/players\/r4.jpg"},
{"name":"Shredder","img":"\/img\/players\/5.jpg","rol":"\/img\/players\/r5.jpg"},
{"name":"Rocksteady","img":"\/img\/players\/6.jpg","rol":"\/img\/players\/r6.jpg"},
{"name":"Bebop","img":"\/img\/players\/7.jpg","rol":"\/img\/players\/r7.jpg"},
{"name":"Foot Soldier","img":"\/img\/players\/8.jpg","rol":"\/img\/players\/r8.jpg"}
],
"games":[
{"matches":[
{"player1":"0","player2":"2","winner":"0"},
{"player1":"1","player2":"3","winner":"3"},
{"player1":"4","player2":"5","winner":"4"},
{"player1":"6","player2":"7","winner":"6"},
{"player1":"0","player2":"3","winner":"0"},
{"player1":"4","player2":"6","winner":"4"},
{"player1":"0","player2":"4","winner":"0"}
]
},
{"matches":[
{"player1":"0","player2":"2","winner":"2"},
{"player1":"1","player2":"3","winner":"3"},
{"player1":"4","player2":"5","winner":"4"},
{"player1":"6","player2":"7","winner":"7"},
{"player1":"2","player2":"3","winner":"2"},
{"player1":"4","player2":"7","winner":"4"},
{"player1":"2","player2":"4","winner":"4"}
]
}
]
}
【问题讨论】:
-
你能发布完整的回溯吗?还有完整的
JSON文件?因为您发布的内容没有'games'部分,但您的代码引用了jsonData['games']。 -
在不检查您是否实际访问正确数据的情况下,您的 JSON 不包含任何数字,仅包含字符串。所以
winner包含一个字符串。您必须先将其转换为数字。 -
“足族”?你不是说“步兵”吗?
-
抱歉剪掉了,不知道要包含多少。我添加了 fulltraceback 和 JSON。谢谢伊格纳西奥大声笑没有注意到我输入的是单数而不是单数。