非常に単純なPython JSONコマンドをテストしてみますが、問題があります。
urlopen('http://www.similarsitesearch.com/api/similar/ebay.com').read()
出力する必要があります
'{"num":20,"status":"ok","r0":"http:\\/\\/www.propertyroom.com\\/","r1":"http:\\/\\/www.ubid.com\\/","r2":"http:\\/\\/www.bidcactus.com\\/","r3":"http:\\/\\/www.etsy.com\\/","r4":"http:\\/\\/us.ebid.net\\/","r5":"http:\\/\\/www.bidrivals.com\\/","r6":"http:\\/\\/www.ioffer.com\\/","r7":"http:\\/\\/www.shopgoodwill.com\\/","r8":"http:\\/\\/www.beezid.com\\/","r9":"http:\\/\\/www.webidz.com\\/","r10":"http:\\/\\/www.auctionzip.com\\/","r11":"http:\\/\\/www.overstock.com\\/","r12":"http:\\/\\/www.bidspotter.com\\/","r13":"http:\\/\\/www.Paypal.com\\/","r14":"http:\\/\\/www.ha.com\\/","r15":"http:\\/\\/www.onlineauction.com\\/","r16":"http:\\/\\/bidz.com\\/","r17":"http:\\/\\/www.epier.com\\/","r18":"http:\\/\\/www.sell.com\\/","r19":"http:\\/\\/www.rasmus.com\\/"}'
しかし、同じ文字列を取得し、前にb
を付けます。
b'{"num":20,"status":"ok","r0":"http:\\/\\/www.propertyroom.com\\/","r1":"http:\\/\\/www.ubid.com\\/","r2":"http:\\/\\/www.bidcactus.com\\/","r3":"http:\\/\\/www.etsy.com\\/","r4":"http:\\/\\/us.ebid.net\\/","r5":"http:\\/\\/www.bidrivals.com\\/","r6":"http:\\/\\/www.ioffer.com\\/","r7":"http:\\/\\/www.shopgoodwill.com\\/","r8":"http:\\/\\/www.beezid.com\\/","r9":"http:\\/\\/www.webidz.com\\/","r10":"http:\\/\\/www.auctionzip.com\\/","r11":"http:\\/\\/www.overstock.com\\/","r12":"http:\\/\\/www.bidspotter.com\\/","r13":"http:\\/\\/www.Paypal.com\\/","r14":"http:\\/\\/www.ha.com\\/","r15":"http:\\/\\/www.onlineauction.com\\/","r16":"http:\\/\\/bidz.com\\/","r17":"http:\\/\\/www.epier.com\\/","r18":"http:\\/\\/www.sell.com\\/","r19":"http:\\/\\/www.rasmus.com\\/"}'
その後、実行しようとすると
json.loads(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read())
それは私にエラーメッセージを与えます:
TypeError:バイトのようなオブジェクトでは文字列パターンを使用できません
私はb
と何か関係があると思いますか?
urlopen
をurllib.request
からインポートし、Python 3.を実行しています。
何か案は?
Read()のコンテンツはbytesタイプであるため、jsonオブジェクトにデコードする前に、文字列に変換する必要があります。
bytesを文字列に変換するには、コードを次のように変更します:urlopen('http://similarsitesearch.com/api/similar/ebay.com').read().decode("utf-8")
それはうまくいきました:
def myView(request):
encoding = request.read().decode("utf-8")
dic = json.loads(encoding)
print(dic)
_Content-Type
_ヘッダーで指定された文字セットを調べ、json.load*()
に渡す前にそれをデコードする必要があります。
バイトリテラル のように見えます。 httpでデータを取得する方法、またはAPIがヘッダーでデータを返す方法を調べます。
urllibはバイト配列を返しますが、これはpy3のデフォルトであり、jsonは文字列を想定しています。 json呼び出しを呼び出す前に、戻り値をstr()呼び出しでラップしてみてください
j = str(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read())
json.loads(j)