我正在尝试编写一个 Python 脚本,将一些 JSON 发布到 Web 服务器并获取一些 JSON。我在 StackOverflow 上拼凑了几个不同的例子,我认为我有一些主要工作的东西。
import urllib2
import json
url = "http://foo.com/API.svc/SomeMethod"
payload = json.dumps( {'inputs': ['red', 'blue', 'green']} )
headers = {"Content-type": "application/json;"}
req = urllib2.Request(url, payload, headers)
f = urllib2.urlopen(req)
response = f.read()
f.close()
data = json.loads(response) # <-- Crashes
最后一行抛出异常:
ValueError:无法解码任何 JSON 对象
当我查看 时response
,我看到了有效的 JSON,但前几个字符是 BOM:
>>> response
'\xef\xbb\xbf[\r\n {\r\n ... Valid JSON here
所以,如果我手动去掉前三个字节:
data = json.loads(response[3::])
一切正常,并response
变成了字典。
我的问题:
json
当你给它一个 BOM 时,它似乎有点愚蠢。有什么不同的我可以做的urllib
或者json
图书馆让它知道这是一个 UTF8 字符串并这样处理它吗?我不想手动删除前 3 个字节。