您好我在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"])
我得到的错误是:
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
所以我只是想知道是否有人对如何修复此错误有任何想法?或者,如果有人之前看到过这个错误? 在此先感谢您的帮助 J.Rymer
答案 0 :(得分:10)
在Python 3中,您需要解码 bytes
从urllib.request.urlopen()
返回值到unicode字符串:
decoded = json.loads(json_input.decode('utf8'))
这假设您使用的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))