import json
import urllib.request, urllib.error, urllib.parse
Name = 'BagFullOfHoles' #Random player
Platform = 'xone'#pc, xbox, xone, ps4, ps3
url = 'http://api.bfhstats.com/api/playerInfo?plat=' + Platform + '&name=' + Name
json_obj = urllib.request.urlopen(url)
data = json.load(json_obj)
print (data)
TypeError:不能在类字节对象上使用字符串模式
刚刚使用2to3.py,当我尝试修复它时出现此错误或其他错误。有指点的人吗?
答案 0 :(得分:4)
json_obj = urllib.request.urlopen(url)
返回HTTPResponse对象。我们需要read()
响应字节,然后decode()
这些字节到字符串,如下所示:
import json
import urllib.request, urllib.error, urllib.parse
Name = 'BagFullOfHoles' #Random player
Platform = 'xone'#pc, xbox, xone, ps4, ps3
url = 'http://api.bfhstats.com/api/playerInfo?plat=' + Platform + '&name=' + Name
json_obj = urllib.request.urlopen(url)
string = json_obj.read().decode('utf-8')
json_obj = json.loads(string)
print (json_obj)
答案 1 :(得分:1)
如您所知,Python 3具有单独的bytes
和str
类型。从以二进制模式打开的文件中读取将返回bytes
个对象。
json.load()
函数仅适用于在文本模式下打开的文件(和类文件对象)(与二进制模式相反)。似乎urllib.request.urlopen()
将以二进制模式返回类似文件。
不要使用json.load()
,而是考虑从HTTPResponse
对象中读取并解码,然后传递给json.loads()
,如下所示:
with urllib.request.urlopen(url) as f:
json_str = f.read().decode()
obj = json.loads(json_str)
或者,您可能希望调查requests module。