2011-07-03 24 views
0

私はURL呼び出しています:JSON文字列デコードエラー

ValueError: Invalid control character at: line 1 column 1120 (char 1120) 

I:私は次のようなエラーに遭遇する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()) 

を使用してurllib2のとデコードを使用して

http://code.google.com/feeds/issues/p/chromium/issues/full/291?alt=json 

をヘッダーをチェックしてみたところ、次のようになった。

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') 

私はまだ同じエラーに遭遇します。

+0

それはあなたが得るもののようになりますjsonでエンコードされた有効な文字列ではありません。 – hakre

+0

すばらしい、ありがとう!そうします。 – Dexter

答えて

4

フィードには、その時点でJPEGの生データが含まれています。 JSONは不正な形式なので、あなたの責任ではありません。 Googleにバグを報告してください。

+0

ああ!私は人々が早くもそのような問題に遭遇したと考えている。 http://code.google.com/p/gdata-issues/issues/detail?id=942 – Dexter

2

代わりにlxmlを使用することを検討してください。これは、JSONの形式が正しくないためです。

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) 

を要素を操作することはかなり簡単に、例えば辞書に変換し、タグから名前空間を削除する:XPathのサポートはかなりストレートなXMLでの作業になります

>>> 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'} 
+0

ありがとうございますが、私はいつも辞書に変換されるので、JSONオブジェクトはいつも好きです。 – Dexter

+0

JSONも好きですが、時には選択肢がありません。 – zeekay

+1

現在、しています。 :-) – Dexter