0

有効な json のように見える json 文字列を解析するのが困難です。

私のコードは次のとおりです。URLから単純なjsonを取得しようとしています。

import urllib2    
import simplejson
req = urllib2.Request("http://www.rentrent.org/RENT/Ads.aspx?xmin=-118.01925659179687&ymin=33.71948521132481&xmax=-117.68142700195314&ymax=33.85644642218431&bd=&ba=&pets=-1&type=2&throwErrorIfOverLimit=false&callback=xxx")  

opener = urllib2.build_opener()    
f = opener.open(req)    
content = f.read();    
print "content = " + content   # Appears to print valid json string
json = simplejson.loads(content)

次のエラーが表示されsimplejson.loads(content)ます。

raise JSONDecodeError("No JSON object could be decoded", s, idx) 
simplejson.decoder.JSONDecodeError: No JSON object could be decoded: line 1 column 0 (char 0)

content完全に適切な json 文字列のように見えるため、これは混乱を招きます。

このデータを個々の要素として取得する必要があります。このエラーを取り除く方法はありますか?

4

1 に答える 1

3

これは jsonp API の URL です。関数呼び出し xxx() でラップされた応答が返されることを期待しています。jsonp の処理方法を調べます。現在取得しているのは、実際には有効な jsonp ではありません。その有効な JavaScript。

違いに関する別の質問があります:
JSON と JSONP の違いは何ですか?

URL からコールバック パラメータを削除して、純粋な json を取得できます:
http://www.rentrent.org/RENT/Ads.aspx?xmin=-118.01925659179687&ymin=33.71948521132481&xmax=-117.68142700195314&ymax=33.85644642218431=&bd= =-1&type=2&throwErrorIfOverLimit=false

アップデート

URL からコールバック パラメータを削除しても、実際にはこの API に JSON を返すように指示しないことを見落としていました。関数にラップされるのを防ぐだけです。戻り値はまだjsonではありません。ジャバスクリプトです。具体的には、以下に例を示します。

Javascript 戻り値から

{Status:'Success',

JSON

{'Status':'Success',

すべてのキーを引用する必要があります。オプションは次のいずれかです。

  1. API が jsonp の代わりに json の戻り値をサポートしているかどうかを確認します
  2. デコードする前にすべてのキーを引用するために、出力に対して正規表現の修正を行います
于 2012-04-29T02:22:16.960 に答える