@ goodvibration ответ был верным, если учесть, что json.load использует функцию чтения, что означает, что после прочтения данных его невозможно прочитать снова. В этом случае будет возвращена пустая строка байтов.
Этот код работает, печатая True в конце.
response = urllib2.urlopen('https://www.googleapis.com/youtube/v3/videos?id=gwLej8heN5c&part=status&key=MY_KEY')
for item in json.load(response)['items']: print(item['status']['license'] == 'creativeCommon')
Кроме того, в исходном примере и в примере ошибки вы использовали список (json.load (response)) при сохранении в данные. Это будет означать, что вы получаете не весь JSON, а только ключи. Так что в вашем случае я бы предложил не менять ответ на список. Но так как вы не использовали переменную данных позже в примере, это на самом деле не меняет результаты. Но это может быть важно, если у вас есть дополнительная информация, которую вы хотите проверить / сохранить.
Кроме того, в этом случае, поскольку json.load () использует функцию чтения, которую нельзя использовать несколько раз, вам необходимо сохранить весь json и затем прочитать из него. Код будет:
response = urllib2.urlopen('https://www.googleapis.com/youtube/v3/videos?id=gwLej8heN5c&part=status&key=MY_KEY')
data = json.load(response)
for item in data['items']: print(item['status']['license'] == 'creativeCommon')
Вы можете увидеть это, если попытаетесь прочитать полученный ответ. Вы можете поставить следующий код для проверки:
response = urllib2.urlopen('https://www.googleapis.com/youtube/v3/videos?id=gwLej8heN5c&part=status&key=MY_KEY')
print(response.read())
print(response.read())
В этом случае результаты будут:
b'{\n "kind": "youtube#videoListResponse",\n "etag": "\\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/3jdRB-NXSAfUQj7e_FmBbivkK1o\\"",\n "pageInfo": {\n "totalResults": 1,\n "resultsPerPage": 1\n },\n "items": [\n {\n "kind": "youtube#video",\n "etag": "\\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/NUd32t1_moLGAwVuu-ZujlkaiWM\\"",\n "id": "gwLej8heN5c",\n "status": {\n "uploadStatus": "processed",\n "privacyStatus": "public",\n "license": "creativeCommon",\n "embeddable": true,\n "publicStatsViewable": true\n }\n }\n ]\n}\n'
b''
В первом случае результатом является json в виде строки байтов, а во втором - пустая строка байтов. Поэтому, когда вы попытаетесь использовать несколько json.load () для одного и того же элемента ответа, вы получите JSONDecodeError (так же, как в вашем комментарии), так как во второй раз нет json для анализа.