Использовать «байт-подобный объект» из urlopen.read с JSON?

Просто пытаюсь проверить очень простые команды 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.

Есть идеи?

5 Solutions collect form web for “Использовать «байт-подобный объект» из urlopen.read с JSON?”

Содержимое из read () имеет байты типа, поэтому вам нужно преобразовать его в строку, прежде чем пытаться декодировать его в json-объект.

Чтобы преобразовать байты в строку, измените свой код на: urlopen('http://similarsitesearch.com/api/similar/ebay.com').read().decode("utf-8") : 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*() .

urllib возвращает массив байтов, который, как я полагаю, является значением по умолчанию в py3, а json ожидает строку. Попробуйте обернуть возвращаемое значение в вызове str () перед вызовом json

 j = str(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read()) json.loads(j) 

Похоже на байтовый литерал . Изучите, как вы получаете данные с помощью http, или как API возвращает данные в заголовках.

  • 503 при попытке доступа к Патентам Google с использованием python
  • Как надежно обрабатывать веб-данные в Python
  • Как установить флаг TCP_NODELAY при загрузке URL с urllib2?
  • небуферизованный urllib2.urlopen
  • Тарабарщина из urlopen
  • таймаут для urllib2.urlopen () в версиях pre Python 2.6
  • Почему urllib2.urlopen не может открывать такие страницы, как «http: // localhost / new-post # comment-29»?
  • Имеет ли urllib2.urlopen () кеш-файл?
  • Проблема с urlopen при попытке загрузить файл gzip
  • Как использовать urllib2.urlopen для запроса POST без аргумента данных
  • Как получить URL-адрес не-ascii с помощью urlopen Python?
  •  
    Interesting Posts for Van-Lav

    Шаблоны django: включают и расширяют

    если __name__ == '__main__' в IPython

    неблокирующий сокет, ошибка всегда

    Специальные символы в звуковых устройствах: Pyaudio

    Я пытаюсь напечатать только выбранное количество Pi, оно возвращается с ошибкой «Decimal не имеет атрибута: __getitem__

    Как найти первый «ключ»? в словаре?

    Почему обрабатывается отсортированный массив не быстрее, чем несортированный массив в Python?

    PYODBC для Pandas – DataFrame не работает – Форма переданных значений (x, y), индексы подразумевают (w, z)

    Как реализовать сторожевой таймер в Python?

    Получение URL-адресов, написанных на странице с помощью веб-страницы

    Поиск документа в MongoDB с помощью _id с использованием расширения Flask-pymongo

    Отсутствует цикл для записи файла

    Разница между «и» (логическая) и «&» (побитовая) в python. Почему разница в поведении со списками против массивов numpy?

    Неожиданное поведение от Popen, когда веб-приложение развернуто с помощью apache

    Запись списка Python в один столбец CSV

    Python - лучший язык программирования в мире.