不是JSON可序列化的

我有以下ListView

import json class CountryListView(ListView): model = Country def render_to_response(self, context, **response_kwargs): return json.dumps(self.get_queryset().values_list('code', flat=True)) 

但是我得到以下错误:

 [u'ae', u'ag', u'ai', u'al', u'am', u'ao', u'ar', u'at', u'au', u'aw', u'az', u'ba', u'bb', u'bd', u'be', u'bg', u'bh', u'bl', u'bm', u'bn', '...(remaining elements truncated)...'] is not JSON serializable 

有任何想法吗 ?

我会添加一个更详细的答案。

值得注意的是, QuerySet.values_list()方法实际上并不返回一个列表,而是一个types为django.db.models.query.ValuesListQuerySet的对象,以便维护Django的懒惰评估目标,即需要DB查询生成“列表”实际上并没有执行,直到对象被评估。

但是,有些恼人的是,这个对象有一个自定义的__repr__方法,当它打印出来的时候它看起来像一个列表,所以对象不是一个真正的列表。

问题中的exception是由于自定义对象不能在JSON中序列化的事实,所以你必须首先将其转换为列表,…

 my_list = list(self.get_queryset().values_list('code', flat=True)) 

…那么你可以将其转换为JSON …

 json_data = json.dumps(my_list) 

您还必须将生成的JSON数据放在一个HttpResponse对象中, 显然 ,它应该有一个Content-Typeapplication/json ,…

 response = HttpResponse(json_data, content_type='application/json') 

…然后你可以从你的function返回。

 class CountryListView(ListView): model = Country def render_to_response(self, context, **response_kwargs): return HttpResponse(json.dumps(list(self.get_queryset().values_list('code', flat=True))),mimetype="application/json") 

解决了这个问题

也是mimetype很重要。