2011-05-19 35 views
3

我想用Django與jquery UI autocomplete,但無法發送響應。Python:列表到JSON

這裏是我的代碼:

def ajax_tags_autocomplete(request): 
    """ Autocomplete for tag list """ 
    beginning_of_title = request.GET.get('term', '') 
    tags_found = Tag.objects.values_list('title', flat=True).filter(title__startswith=beginning_of_title) 
    return HttpResponse(json.dumps(tags_found), mimetype='application/json') 

我得到一個錯誤:

[u"php"] is not JSON serializable 

爲什麼?不可能序列化一個列表?那麼我應該傳遞給序列化程序呢?

我會很樂意提供任何建議。

回答

9

你確定它實際上是一個包含unicode對象而不是包含一些數據庫對象的列表的列表嗎? u"php"可能只是該對象的repr()

嘗試json.dumps([unicode(t) for t in tags_found])json.dumps(map(unicode, tags_found))

+0

它,其實,成功了!你能解釋那裏發生了什麼嗎?我確信'values_list('title',flat = True)'給了我一個正常的單子列表或字符串。 – 2011-05-19 09:25:44

+2

'values_list()'僅在評估後返回列表。除非你評估它('list(tags_found)'是最簡單的方法),它將是queryset,它不是JSON可序列化的。 – DrTyrsa 2011-05-19 09:29:24

+0

不,我對Django或其ORM並不熟悉。但是,因爲它的工作,這意味着Django返回一個(可能是普通的)列表,其中包含一些不是普通的str/unicode對象的對象。 – ThiefMaster 2011-05-19 09:30:50