JSON を Web サーバーに送信し、JSON を取得する Python スクリプトを作成しようとしています。StackOverflow でいくつかの異なる例にパッチを当てましたが、ほとんど機能しているものがあると思います。
import urllib2
import json
url = "http://foo.com/API.svc/SomeMethod"
payload = json.dumps( {'inputs': ['red', 'blue', 'green']} )
headers = {"Content-type": "application/json;"}
req = urllib2.Request(url, payload, headers)
f = urllib2.urlopen(req)
response = f.read()
f.close()
data = json.loads(response) # <-- Crashes
最後の行で例外がスローされます。
ValueError: JSON オブジェクトをデコードできませんでした
を見るとresponse
、有効な JSON が表示されますが、最初の数文字は BOM です。
>>> response
'\xef\xbb\xbf[\r\n {\r\n ... Valid JSON here
したがって、最初の 3 バイトを手動で削除すると、次のようになります。
data = json.loads(response[3::])
すべてが機能response
し、辞書に変わります。
私の質問:
json
あなたがそれにBOMを与えるときにbarfsするのはちょっとばかげているようです. これがUTF8文字列であることを知らせ、そのように処理するためにurllib
、ライブラリでできることはありますか? json
最初の 3 バイトを手動で削除したくありません。