JSON字符串解码错误
我正在调用这个网址:
http://code.google.com/feeds/issues/p/chromium/issues/full/291?alt=json
我使用urllib2来获取数据,然后用json模块来解码。
url = "http://code.google.com/feeds/issues/p/chromium/issues/full/291?alt=json"
request = urllib2.Request(query)
response = urllib2.urlopen(request)
issue_report = json.loads(response.read())
但是我遇到了以下错误:
ValueError: Invalid control character at: line 1 column 1120 (char 1120)
我尝试检查了一下请求的头信息,结果是这样的:
Content-Type: application/json; charset=UTF-8
Access-Control-Allow-Origin: *
Expires: Sun, 03 Jul 2011 17:38:38 GMT
Date: Sun, 03 Jul 2011 17:38:38 GMT
Cache-Control: private, max-age=0, must-revalidate, no-transform
Vary: Accept, X-GData-Authorization, GData-Version
GData-Version: 1.0
ETag: W/"CUEGQX47eCl7ImA9WxJaFEw."
Last-Modified: Tue, 04 Aug 2009 19:20:20 GMT
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Connection: close
我还尝试添加了一个编码参数,像这样:
issue_report = json.loads(response.read() , encoding = 'UTF-8')
但我还是遇到了同样的错误。
2 个回答
2
你可以考虑使用lxml
,因为你的JSON格式有问题。它支持XPath,这样处理XML就简单多了:
import lxml.etree
url = 'http://code.google.com/feeds/issues/p/chromium/issues/full/291'
doc = lxml.etree.parse(url)
ns = {'issues': 'http://schemas.google.com/projecthosting/issues/2009'}
issues = doc.xpath('//issues:*', namespaces=ns)
操作元素也很简单,比如可以去掉标签中的命名空间,或者把它转换成字典:
>>> dict((x.tag[len(ns['issues'])+2:], x.text) for x in issues)
<<<
{'closedDate': '2009-08-04T19:20:20.000Z',
'id': '291',
'label': 'Area-BrowserUI',
'stars': '13',
'state': 'closed',
'status': 'Verified'}
4
这个信息里包含了一些来自JPEG图片的原始数据;而且JSON格式有问题,所以这不是你的错。你可以向谷歌报告这个错误。