すべて、通常、私の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でないときに、実際のコンテンツをどのように解析し、次に続けるかを見つけることを試みてきました。
ペーストビンイメージは実際にはリクエストダンプのようには見えません。これはAPIからの妥当な応答です。 –
json.loadsの値エラーになると、もしそうなら、完全なトレースバックを投稿してください。 –
@ArpitSolanki通常はJSONを返すだけです。私はこのエラーに遭遇するとき、それは言う:*値エラー、余分なデータライン列A - リングB列B *。 私が気づいた違いは、 'x.content'が純粋なJSONを返すようになり、今やヘッダデータも返すようになったことです。これは珍しいことです.. https://stackoverflow.com/questions/21058935/python-json-loads-shows-valueerror-extra-dataに似たエラーを返しますが、代わりに私の 'json.loads()'を指します。関数 – Fallenreaper