2017-07-15 11 views
0

すべて、通常、私のAPIはjsonを返しますが、時には完全な応答オブジェクトを返します。

JSONをWebサーバーから取得するスクリプトがあります。

url = "foo.com/json" 
response = requests.get(url).content 
data = json.loads(response) 

しかし、JSONオブジェクトを返す代わりに、応答ダンプのように見えることがあります。ここをクリックしてください:https://pastebin.com/fUy5YMuY

どのように私が混乱するかについてです。

は、今私は、上記のpythonを取り、

try: 
    url = "foo.com/json" 
    response = requests.get(url).content 
    data = json.loads(response) 
except Exception as ex: 
    with open("test.txt", "w") as t: 
     t.write(response) 
    print("Error", sys.exc_info()) 

それを包み、これをキャッチする方法はありますか?今私はValueErrorを取得してから、それを再解析しますか?

except Exception as ex: 
    response = reparse(response) 

が、イムはまだそれが時々JSONや他の回、ヘッダ情報+コンテンツを返します。理由として混乱:私のような何かを考えていました。

def reparse(response): 
    """ 
    Catch the ValueError and attempt to reparse it for the json contnet 
    """ 

pastebinダンプのようなものを何らかの要求にフィードすることはできますか?

編集ここに私が得ている完全なスタックトレースがあります。上記のコードで

File "scrape_people_by_fcc_docket.py", line 82, in main 
    json_data = get_page(limit, page*limit) 
File "scrape_people_by_fcc_docket.py", line 13, in get_page 
    data = json.loads(response) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 369, in decode 
    raise ValueError(errmsg("Extra data", s, end, len(s))) 
ValueError: Extra data: line 2 column 1 - line 16 column 367717 (char 3 - 368222) 
None 

response変数によって定義される時間のほとんどは、REPONSEが完全に解析可能であるJSONオブジェクトが返されるので、奇数である

response = requests.get(url).content 

理想的には、私は、コンテンツがJSONでないときに、実際のコンテンツをどのように解析し、次に続けるかを見つけることを試みてきました。

+0

ペーストビンイメージは実際にはリクエストダンプのようには見えません。これはAPIからの妥当な応答です。 –

+0

json.loadsの値エラーになると、もしそうなら、完全なトレースバックを投稿してください。 –

+0

@ArpitSolanki通常はJSONを返すだけです。私はこのエラーに遭遇するとき、それは言う:*値エラー、余分なデータライン列A - リングB列B *。 私が気づいた違いは、 'x.content'が純粋なJSONを返すようになり、今やヘッダデータも返すようになったことです。これは珍しいことです.. https://stackoverflow.com/questions/21058935/python-json-loads-shows-valueerror-extra-dataに似たエラーを返しますが、代わりに私の 'json.loads()'を指します。関数 – Fallenreaper

答えて

0

の代わりに.textまたは.contentの応答方法を使用することができます。.json()これまでのところ私の問題を解決しているようです。私は継続的なテストとエラーを監視しており、必要に応じてこれを更新しますが、json関数はヘッダーなしで必要なデータを返し、同様に既に情報を解析するためにjson.loadsなどを呼び出すようです。

関連する問題