2014-03-12 30 views
2

嗨,我在Python编码尝试做一个学校项目的用户友好的货币兑换应用程序,但遇到并尝试解码json的汇率。 我使用的代码是:Python的JSON解码错误TypeError:不能在类似字节的对象上使用字符串模式

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

回答

10

在Python 3,您需要解码urllib.request.urlopen() Unicode字符串的bytes返回值:

decoded = json.loads(json_input.decode('utf8')) 

这使得假设网您正在使用的服务正在使用UTF-8的默认JSON编码。

您可以检查设置的字符的响应,如果你不想承担:

f = urllib.request.urlopen(url) 
charset = f.info().get_param('charset', 'utf8') 
data = f.read() 
decoded = json.loads(data.decode(charset)) 
+0

感谢您的快速性反应!它工作100%,所以谢谢:) – jjr2000

+0

再次感谢我接受了你。 ;) – jjr2000

+0

在'django-rest-framework'测试中,第一个已解码的代码片段适用于我。谢谢 –

相关问题