Python 2'de, json.loads () yerine json.load () çalışır
import json
import urllib
url = 'https://api.github.com/users?since=100'
output = json.load(urllib.urlopen(url))
print(output)
Ne yazık ki, bu Python 3'te çalışmaz. Json.load, dosya benzeri bir nesne için read () öğesini çağıran json.loads etrafında sadece bir sarıcıdır. json.loads bir dize nesnesi gerektirir ve urllib.urlopen (url) .read () çıktısı bir bayt nesnesidir. Bu yüzden Python 3'te çalışmasını sağlamak için dosya kodlamasını almak gerekir.
Bu örnekte, kodlama başlıklarını sorgular ve almazsak utf-8'e geri döneriz. Üstbilgi nesnesi, Python 2 ve 3 arasında farklı olduğundan, farklı yollarla yapılması gerekir. İstekleri kullanmak tüm bunları önler, ancak bazen standart kütüphaneye bağlı kalmanız gerekir.
import json
from six.moves.urllib.request import urlopen
DEFAULT_ENCODING = 'utf-8'
url = 'https://api.github.com/users?since=100'
urlResponse = urlopen(url)
if hasattr(urlResponse.headers, 'get_content_charset'):
encoding = urlResponse.headers.get_content_charset(DEFAULT_ENCODING)
else:
encoding = urlResponse.headers.getparam('charset') or DEFAULT_ENCODING
output = json.loads(urlResponse.read().decode(encoding))
print(output)
json.loads
neden olan bir dize kullanımını (tüketir.read()
gereklidir kullanmakjson.load(response)
yerine.