2010-07-30 15 views
7

Próbuję uzyskać wyniki wyszukiwania interfejsu Twitter API dla danego hashtagu przy użyciu Pythona, ale mam problem z tym błędem "Nie można zdekodować obiektu JSON". Musiałem dodać dodatkowy% na końcu adresu URL, aby zapobiec błędowi formatowania napisów. Czy ten błąd JSON może być powiązany z dodatkowym%, czy jest spowodowany przez coś innego? Wszelkie sugestie będą mile widziane.Jak naprawić błąd "JSONDecodeError: Nie można zdekodować obiektu JSON: wiersz 1 kolumna 0 (znak 0)"?

fragment:

import simplejson 
import urllib2 

def search_twitter(quoted_search_term): 
    url = "http://search.twitter.com/search.json?callback=twitterSearch&q=%%23%s" % quoted_search_term 
    f = urllib2.urlopen(url) 
    json = simplejson.load(f) 
    return json 
+1

Jaka jest rzeczywista treść odpowiedzi? Używając twojego kodu możesz go znaleźć z czymś takim jak 'content = f.read()'. –

+0

Użyłem twojego kodu i wypróbowałem drukowanie zawartości, ale otrzymałem ten sam błąd: JSONDecodeError: Nie można zdekodować obiektu JSON: wiersz 1 kolumna 0 (znak 0) funkcja pull_tweets in twitter_puller_1.py w linii 28 data1 = wyszukiwarka (zapytanie1) funkcja search_twitter w twitter_puller_1.py na linii 14 json = simplejson.load (f) w funkcji obciążenia tytułu wzdłuż linii 328 Brak ładunki funkcyjnych tytułu w wierszu 384 Brak funkcja dekodowania z tytułu wzdłuż linii 402 obj, end = self.raw_decode (s, idx = _w (s, 0) .end()) funkcja raw_decode w untitled w linii 420 podniesienie JSONDecodeErro r ("Nie można zdekodować obiektu JSON", s, idx) – user374372

+1

Zobacz odpowiedź blcArmadillo. Musisz usunąć argument "callback" ze swojego żądania na Twitter. Coś jak 'url =" http://search.twitter.com/search.json?q=%s "% quoted_search_term" powinno działać. –

Odpowiedz

8

Było kilka problemów z początkowego kodu. Najpierw nigdy nie czytasz treści z Twittera, właśnie otworzyłeś adres URL. Po drugie w url ustawisz wywołanie zwrotne (twitterSearch). Odwołanie zwrotne json w wywołaniu funkcji polega na tym, że w tym przypadku byłby to twitterSearch(). Jest to przydatne, jeśli potrzebujesz specjalnej funkcji do obsługi zwróconych wyników.

import simplejson 
import urllib2 

def search_twitter(quoted_search_term): 
    url = "http://search.twitter.com/search.json?&q=%%23%s" % quoted_search_term 
    f = urllib2.urlopen(url) 
    content = f.read() 
    json = simplejson.loads(content) 
    return json 
+3

Masz połowę racji. Rzeczywistym problemem był argument 'callback', który powodował, że Twitter zwracał' JSONP', którego nie można przetworzyć jako JSON'. Ale kod do odczytu JSON był w porządku (po prostu przekazał podobny do pliku obiekt 'f' bezpośrednio do funkcji' simplejson.load() ', która przyjmuje obiekty podobne do plików). –

+0

Ahh, dobry punkt! – blcArmadillo

+0

Dziękuję bardzo za wyjaśnienie mi tego, blcArmadillo i Will McCutchen! Teraz działa :) – user374372

Powiązane problemy