Python JSON解码错误TypeError:不能在类字节对象上使用字符串模式

jjr*_*000 2 python json

嗨,我在python中编码试图为学校项目制作一个用户友好的货币兑换应用程序,但遇到了错误,试图解码json的汇率.我正在使用的代码是:

import urllib.request
import json
(str) = "http://rate-exchange.appspot.com/currency?from=FRM&to=TO&q=AM";
(str) = (str.replace("FRM", "GBP"))
(str) = (str.replace("TO", "USD"))
url = (str.replace("AM", "20"))
f = urllib.request.urlopen(url)
data = (f.read(100))
print (data)
json_input = data
decoded = json.loads(json_input)
print ("conversion is: ", decoded["v"])
Run Code Online (Sandbox Code Playgroud)

而我得到的错误是:

b'{"to": "USD", "rate": 1.66215, "from": "GBP", "v": 33.243000000000002}'
Traceback (most recent call last):
File "C:\Users\jay\My Cubby\get qure.py", line 12, in <module>
decoded = json.loads(json_input)
File "C:\Python33\lib\json\__init__.py", line 309, in loads
return _default_decoder.decode(s)
File "C:\Python33\lib\json\decoder.py", line 352, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: can't use a string pattern on a bytes-like object
Run Code Online (Sandbox Code Playgroud)

所以我只是想知道是否有人有任何想法如何解决这个错误?或者,如果有人之前看到过这个错误?在此先感谢任何帮助J.Rymer

Mar*_*ers 10

在Python 3中,您需要将返回值解码为unicode字符串:bytesurllib.request.urlopen()

decoded = json.loads(json_input.decode('utf8'))
Run Code Online (Sandbox Code Playgroud)

这假设您正在使用的Web服务使用UTF-8的默认JSON编码.

如果您不想假设,可以检查字符集的响应:

f = urllib.request.urlopen(url)
charset = f.info().get_param('charset', 'utf8')
data = f.read()
decoded = json.loads(data.decode(charset))
Run Code Online (Sandbox Code Playgroud)