2017-10-12 10 views
-1

私はそれが大いに文書化されていることを知っていて、私はそれが行くべきだと思うどこでも.read().decode('utf-8')を配置しようとしましたが、私はまだ何かが不足しています。私はPython 2.7でオブジェクトIDをフェッチすることでデータのESRI REST URLをスクラップするスクリプトを作成しました。しかし、Python 3では協調しているようには見えません。それは29行目で失敗し続けます(下記参照)。どんな助けでも大いに感謝します。Python 3 Urlopenの問題

 version = json.loads(webresp.decode('utf-8'))['currentVersion'] 

私は常に一貫してこのエラーを取得しています:

Traceback (most recent call last): 
    File "<pyshell#20>", line 1, in <module> 
    main(url, jsonfilelocation, jsonfilename) 
    File "\\SERVER\Projects\Python\TOUCH\esrirestjson.py", line 73, in main 
    oids = ESRIJSON().getobjrange(webconn, path) 
    File "\\SERVER\Projects\Python\TOUCH\esrirestjson.py", line 29, in getobjrange 
    version = json.loads(webresp.decode('utf-8'))['currentVersion'] 
    File "C:\ArcGISPro\bin\Python\envs\arcgispro-py3\lib\json\__init__.py", line 312, in loads 
    s.__class__.__name__)) 
TypeError: the JSON object must be str, not 'bytes' 
+0

「ESRIJSON」クラスを実際にインスタンス化した例のコードを追加できますか?私は間違いなく答えを提供し、コードを自分ですぐにテストすることができます。ありがとう – jamescampbell

+0

あなたのエラーはここにあります:** version = json.loads(webresp.decode( 'utf-8'))['currentVersion'] **何を試しましたか? - なぜこのコード全体を投稿する必要がありますか? –

+0

https://stackoverflow.com/questions/31708519/request-returns-bytes-and-im-failing-to-decode-themおそらく.contentを追加しようとしますか? webconn.getresponse()。content –

答えて

1

私はあなたのエラーがjson.loadjson.loads()を変更することで固定され、すべてのdecode('utf-8')を削除してしまいました。今度は、Python 3で文字列の書式設定を正しく処理しないために別のバグが発生しました。qs変数は、"?where=&outFields=*&returnGeometry={} .format(変数を文字列に追加する)の形式にする必要があり、エンコードの問題を気にすることがありません。私はまだそのqs文字列でasciiエラーを取得していますが、うまくいけば、これは正しい方向にあなたを指します。 Python 3は2.7より10倍優れており、十分な価値があります。

+0

興味深いことに、 'json.loads()'を削除して 'json.load()'に切り替えると、 'AttributeError: 'bytes'オブジェクトに属性 'read'がありません。 –

+0

申し訳ありません。また.read()も削除してください。必要ない。私も同様に削除し、答えにそれを置くことを忘れてしまった。あなたはprint(version)でテストすることができ、json.load()を実行した後には素晴らしい結果を出すことができます。あなたが扱っているものを見るために行くときは、常にデータを印刷してください。 – jamescampbell

+0

実際のJSONモジュールの 'AttributeError'です。 'ファイルC:\ ArcGISPro \ bin \ Python \ envs \ arcgispro-py3 \ lib \ json \ __ init__.py"、行265、ロード中 リターンロード(fp.read()、 –