嗨,我在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)
| 归档时间: |
|
| 查看次数: |
4990 次 |
| 最近记录: |