9
votes

Python: Convertir JSON (renvoyé par URL) dans la liste

Je demande des termes de recherche YouTube pour une utilisation avec JQuery Autocomplete, mais j'ai du mal à convertir la réponse de l'URL en un format approprié.

dans ma vue (django / python) Je fais: p>

j2 = json.loads(data2.read())


0 commentaires

4 Réponses :


0
votes

Ce n'est pas JSON C'est JavaScript, si vous souhaitez l'utiliser comme JSON, vous devez désigner la partie JavaScript: xxx pré>

mais vous pouvez simplement modifier l'URL (supprimer la fenêtre JSONP =. yt.www.suggest.handlerleresponse 'Part) Pour avoir une sortie PURE JSON: P>

>>> data2 = urllib2.urlopen('http://suggestqueries.google.com/complete/search?hl=en&ds=yt&client=youtube&hjson=t&q=jum&cp=3')
>>> json.loads(data2.read())
[u'jum', [[u'jumpstyle', '', u'0'], [u'jump', '', u'1'], [u'jump around', '', u'2'], [u'jump on it', '', u'3'], [u'jumper', '', u'4'], [u'jump around house of pain', '', u'5'], [u'jumper third eye blind', '', u'6'], [u'jumbafund', '', u'7'], [u'jump then fall taylor swift', '', u'8'], [u'jumpstyle music', '', u'9']], '', '', '', '', '', {}]


0 commentaires

0
votes

La sortie de la page n'est pas une page codée JSON appropriée. Vous devez supprimer l'appel de la fonction JS l'enveloppant.

Faites ceci: p>

import urllib2
import re
import json

data2 = urllib2.urlopen('http://suggestqueries.google.com/complete/search?' +    
   'hl=en&ds=yt&client=youtube&hjson=t&jsonp=window.yt.' + 
   'www.suggest.handleResponse&q=jum&cp=3')

data = re.compile('^[^\(]+\(|\)$').sub('', data2.read())
parsedData = json.loads(data)


0 commentaires

3
votes

Vous faites une demande JSON-P qui enveloppe automatiquement le JSON dans une fonction de rappel JavaScript, celle que vous avez spécifiée dans la demande en fait :)

Élevez le paramètre JSON-P de votre demande et vous allez Obtenez directement JSON directement à partir de la demande sans avoir à faire des trucs de python supplémentaires du tout. P>

Ceci devrait être votre demande: p>

["jum",[["jumpstyle","","0"],["jump","","1"],["jump around","","2"],["jump on it","","3"],["jumper","","4"],["jump around house of pain","","5"],["jumper third eye blind","","6"],["jumbafund","","7"],["jump then fall taylor swift","","8"],["jumpstyle music","","9"]],"","","","","",{}]


2 commentaires

Ah ... Comment puis-je ressembler à: ["Jumpstyle", "sauter", "sauter" ...] Je ne sais pas comment manipuler ces types de données: qu'est-ce que c'est? Une liste, une chaîne, un objet JSON? J'ai essayé json.loads (retourné_by_url) mais obtenez une erreur.


Xavier semble avoir couvert que :)



14
votes

Supprimer le & jsonp = window.yt.www.suggest.handleresponse partie xxx


0 commentaires