2011-05-19 70 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