2013-09-15 1 views
0

Я пытаюсь очистить некоторые данные с помощью Spotify API. Приведенный ниже код работает и возвращает много текста при поиске имени трека «if i ​​can not». Начало выхода из API печатает на моем сайте и выглядит следующим образом:Python Cherrypy: словарь не ведет себя как словарь

enter image description here

Это выглядит как словарь для забавной б»в начале, за исключением. Также я не могу получить к нему доступ, как словарь. Если я пытаюсь

возвращение raw_data [ 'информация']

он бросает ошибку. Аналогично, если я попытаюсь найти его тип (так что возвращаемый тип (raw_data) вместо return raw_data), страница становится пустой.

Есть ли способ сохранить результат из data.read() в виде словаря? Использование

вызывает ошибку.

#!/usr/local/bin/python3.2 
# -*- coding: utf-8 -*- 
import cherrypy 
import numpy as np 
import urllib.request 

class Root(object): 
    @cherrypy.expose 
    def index(self): 

      a_query = Query() 
      text = a_query.search() 

      return '''<html> 
      Welcome to Spoti.py! %s 
      </html>''' %text 

class Query(): 

    def __init__(self): 
     self.qstring = '''if i can't''' 

    def space_to_plus(self): 
     '''takes the instance var qstring 
     replaces ' ' with '+' 
     ----------------------- 
     returns nothing''' 

     self.qstring = self.qstring.replace(' ', '+')  

    def search(self): 
     self.space_to_plus() 

     url = 'http://ws.spotify.com/search/1/track.json?q=' + self.qstring 
     data = urllib.request.urlopen(url) 

     raw_data = data.read() 

     #return raw_data['info'] 
     #return type(raw_data) 

     return raw_data 


cherrypy.config.update({ 
    'environment': 'production', 
    'log.screen': False, 
    'server.socket_host': '127.0.0.1', 
    'server.socket_port': 15850, 
    #'tools.encode.on': True, 
    #'tools.encode.encoding': 'utf-8', 
}) 

cherrypy.config.update({'tools.sessions.on': True}) 

cherrypy.quickstart(Root()) 

ответ

1

У вас есть строка JSON. b в начале указывает, что вы печатаете строковый литерал байта. Что вам нужно сделать, так это разобрать JSON. Просто сделайте это:

import json 
... 
info_dict = json.loads(raw_data) 
+1

Спасибо! Все, что мне нужно было добавить, это info_dict = json.loads (raw_data.decode ('utf-8')), и он отлично работал! –

 Смежные вопросы

  • Нет связанных вопросов^_^