2016-01-22 22 views
0

Я начинаю на python. Я пытаюсь использовать json.loads() в моем коде, чтобы перебирать объект json, возвращенный из API.UnicodeDecodeError: кодек 'utf8' не может декодировать байт, итерации по json

Ниже ошибка я получаю:

Traceback (most recent call last): 
    File "/Users/Saket/Downloads/Telegram Desktop/update_trbble (2).py", line 209, in <module> 
    today_trbbles=json.loads(open_discovery_api) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode 
    obj, end = self.scan_once(s, idx) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd8 in position 36: unexpected end of data 
logout 

Я проверил несколько постов и пытались использовать .encode («UTF-8»), а также конвертировать в юникод с помощью Юникода (). Они также не работают.

выборка данных:

status: 0, 
message: "success", 
results: { 
totalTime: "3 ms", 
queryTime: "0 ms", 
status: 0, 
cursor: "AoJ/spqIs9ICPwU4YzcyNWFlZi1hNjM1LTRiNzEtYjM1Ni02MWQ2MWFlMGQwZWU=", 
numFound: 523, 
size: 30, 
songss: [ 
{ 
albumArt: "https://i.scdn.co/image/233728c2073337d67309fd205c6cc028e831d857", 
artist: "Arty, Nadia Ali & BT", 
docSource: [ 
"CACHE" 
], 
commentCount: 0, 
createdBy: "wiredmau5", 
createdTime: "Fri Jan 22 15:07:45 UTC 2016", 
createdUTS: 1453475265411, 
createdUserId: "ae186330-5fa5-469c-b1cc-8f3d3b61e538", 
downVoteCount: 0, 
favouriteCount: 0, 
flag1Count: 0, 
falg2Count: 0, 
flag3Count: 0, 
flag4Count: 0, 
flag5Count: 0, 
flag6Count: 0, 
genre: [ 
"Trance" 
], 
genrePriority: 0, 
hour: 0, 
language: "english", 
languagePriority: 0, 
likeCount: 0, 
minute: 0, 
modifiedTime: { 
time: 1453475748201, 
minutes: 15, 
seconds: 48, 
hours: 15, 
month: 0, 
year: 116, 
timezoneOffset: 0, 
day: 5, 
date: 22 
}, 
+0

Просьба включить данные, которые вы пытаетесь декодировать, по крайней мере, соответствующие первые ~ 40 байт или около того. – unwind

+0

Извините за беспокойство. Добавленные данные выборки –

+0

Не могли бы вы предоставить [минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve)? Это очень помогло бы нам в выявлении проблемы, с которой вы сталкиваетесь. –

ответ

0

Ваша программа возникла проблема интерпретации кодировку вывода вашего запроса API. Во-первых, убедитесь, что вы импортировали как json, так и urllib.request. Затем вам нужно открыть URL-адрес API, в этом случае я устанавливаю вывод равным байту_Obj. Затем вы преобразуете информацию в текст ascii, используя функции .read() и .decode(). Затем, чтобы сделать ваши индексы целыми числами, вы будете использовать функцию .load() из импортированного вами пакета json. Надеюсь это поможет!

import json 
    import urllib.request 
    byte_Obj = urllib.request.urlopen("API URL Here") #urllib is used to open the URL of the API provided 
    json_string = byte_Obj.read().decode("ascii", "ignore") #to decode output into ascii text 
    info = json.loads(json_string) #final info with indices as integers 
Смежные вопросы