从int数组创建JSON

时间:2016-02-20 10:08:41

标签: python json django

我有一个名为ServiceSubCategory的django模型,我想用Python创建一个主键值的JSON列表。

我试过这个:

idDic=[obj.as_json for obj in ServiceSubCategory.objects.values_list('id',flat=True)]

但是我收到了这个错误:

  

int对象没有属性as_json

我这样做是因为我稍后会为此添加另一个JSON。

那么我怎样才能从我的模型质量键中创建一个JSON?

更新

我试过

id_json = json.dumps(ServiceSubCategory.objects.values_list('id',flat=True))

我收到了一个新错误:

  

[1,2,3,4,5,6,7,8,9,10]不是JSON可序列化的

这是追溯:

  

回溯:文件   “/usr/local/lib/python2.7/dist-packages/Django-1.7-py2.7.egg/django/core/handlers/base.py”   在get_response中     111. response = wrapped_callback(request,* callback_args,** callback_kwargs)文件“/var/www/html/salimi/salimi/views.py”正在服务中     61. idDic = json.dumps(ServiceSubCategory.objects.values_list('id',flat = True))   转储中的文件“/usr/lib/python2.7/json/init.py”     243.在编码中返回_default_encoder.encode(obj)文件“/usr/lib/python2.7/json/encoder.py”     207. chunks = self.iterencode(o,_ one_shot = True)文件“/usr/lib/python2.7/json/encoder.py”在iterencode中     270.返回_iterencode(o,0)默认文件“/usr/lib/python2.7/json/encoder.py”     184.引发TypeError(repr(o)+“不是JSON可序列化的”)

     

异常类型:/ service / 1 /异常值的TypeError:[1,2,3,4,   5,6,7,8,9,10]不是JSON可序列化的

3 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

import json
json.dumps(list(ServiceSubCategory.objects.values_list('id', flat=True)))

values_list返回django.db.models.query.ValuesListQuerySet的实例,它没有默认的JSON序列化程序(它只是一个QuerySet,到目前为止还没有数据库请求)。但是,您可以在之前将其转换为列表对象。

import json
values_list_object = ServiceSubCategory.objects.values_list('id', flat=True))
list_object = list(values_list) # querying the database
json.dumps(list_object)

答案 1 :(得分:1)

您可以简单地写下以下内容:

import json

id_json = json.dumps(list(ServiceSubCategory.objects.values_list('id',flat=True)))

答案 2 :(得分:1)

<强>更新

看起来ServiceSubCategory.objects.values_list('id', flat=True)可能会返回一个生成器。在这种情况下,您可以使用list()

来使用生成器
import json
json.dumps(list(ServiceSubCategory.objects.values_list('id', flat=True)))

不会这样做吗?

import json
json.dumps(ServiceSubCategory.objects.values_list('id', flat=True))

由于ServiceSubCategory.objects.values_list已经是一个列表,因此可以将其直接转储到JSON。没有必要使用列表理解。