2010-07-30 16 views
7

Tôi đang cố gắng để có được kết quả tìm kiếm Twitter API cho một thẻ bắt đầu bằng # đã cho bằng Python, nhưng tôi gặp sự cố với lỗi "Không có đối tượng JSON nào có thể được giải mã". Tôi đã phải thêm% thêm vào cuối URL để ngăn chặn lỗi định dạng chuỗi. Có thể lỗi JSON này có liên quan đến% bổ sung hoặc do lỗi khác gây ra không? Bất kỳ đề xuất sẽ được nhiều đánh giá cao.Làm cách nào để sửa lỗi "JSONDecodeError: Không có đối tượng JSON nào có thể được giải mã: dòng 1 cột 0 (char 0)"?

Một đoạn mã:

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

Nội dung thực tế của phản hồi là gì? Sử dụng mã của bạn, bạn có thể thấy rằng với một cái gì đó như 'content = f.read()'. –

+0

Tôi đã sử dụng mã của bạn và cố gắng in nội dung nhưng có cùng lỗi: JSONDecodeError: Không có đối tượng JSON nào được giải mã: dòng 1 cột 0 (char 0) hàm pull_tweets trong twitter_puller_1.py tại dòng 28 data1 = search_twitter (query1) chức năng search_twitter trong twitter_puller_1.py tại dòng 14 json = simplejson.load (f) chức năng tải trong tiêu đề tại dòng 328 Không chức năng tải trong tiêu đề tại dòng 384 Không chức năng giải mã trong tiêu đề tại dòng 402 obj, end = self.raw_decode (s, idx = _w (s, 0) .end()) hàm raw_decode không có tiêu đề tại dòng 420 tăng JSONDecodeErro r ("Không có đối tượng JSON nào có thể được giải mã", s, idx) – user374372

+1

Xem câu trả lời của blcArmadillo. Bạn cần xóa đối số 'callback' khỏi yêu cầu của mình sang Twitter. Một cái gì đó như 'url =" http://search.twitter.com/search.json?q=%s "% quoted_search_term' sẽ hoạt động. –

Trả lời

8

Có một vài vấn đề với mã ban đầu của bạn. Đầu tiên bạn không bao giờ đọc nội dung từ twitter, chỉ cần mở url. Thứ hai trong url bạn thiết lập một cuộc gọi lại (twitterSearch). Những gì một cuộc gọi trở lại không được bọc json trả lại trong một cuộc gọi chức năng như vậy trong trường hợp này nó sẽ có được twitterSearch(). Điều này rất hữu ích nếu bạn muốn có một hàm đặc biệt để xử lý các kết quả trả về.

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

Bạn đang nửa quyền. Vấn đề thực tế là đối số 'callback', khiến cho Twitter trả về' JSONP', không thể phân tích cú pháp thành JSON'. Nhưng mã để đọc JSON là tốt (nó chỉ truyền đối tượng giống như tập tin 'f' trực tiếp đến hàm' simplejson.load() ', lấy các đối tượng giống như tệp). –

+0

Ahh, điểm tốt! – blcArmadillo

+0

Cảm ơn bạn rất nhiều vì đã giải thích điều này với tôi, blcArmadillo và Will McCutchen! Nó hoạt dộng bây giờ :) – user374372

Các vấn đề liên quan