2016-02-20 2 views
0

У меня есть модель django под названием ServiceSubCategory, и я хочу создать список его первичных ключей JSON, используя Python.Создайте JSON из массива int

Я попытался это:

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

Но я получаю эту ошибку:

int object has no attribute as_json

Я делаю это, потому что я собираюсь добавить еще JSON к этому позже.

Итак, как я могу создать JSON из моих базовых ключей моделей?

Update

Я попытался

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

И я получаю новую ошибку:

[1,2,3,4,5,6,7,8,9,10] is not JSON serializable

И это отслеживающий:

Traceback: File "/usr/local/lib/python2.7/dist-packages/Django-1.7-py2.7.egg/django/core/handlers/base.py" in get_response 111. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/var/www/html/salimi/salimi/views.py" in service 61. idDic=json.dumps(ServiceSubCategory.objects.values_list('id',flat=True)) File "/usr/lib/python2.7/json/init.py" in dumps 243. return _default_encoder.encode(obj) File "/usr/lib/python2.7/json/encoder.py" in encode 207. chunks = self.iterencode(o, _one_shot=True) File "/usr/lib/python2.7/json/encoder.py" in iterencode 270. return _iterencode(o, 0) File "/usr/lib/python2.7/json/encoder.py" in default 184. raise TypeError(repr(o) + " is not JSON serializable")

Exception Type: TypeError at /service/1/ Exception Value: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] is not JSON serializable

ответ

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) 
+0

Спасибо. Он решил проблему. –

1

Вы можете просто написать следующее:

import json 

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

теперь я получаю '[1,2,3,4,5,6,7,8,9,10] не JSON serializable' –

1

Update

Похоже 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. Нет необходимости использовать понимание списка.

+0

теперь я получаю' [1,2, 3,4,5,6,7,8,9,10] не JSON serializable' –

+0

@AlexJolig: Не могли бы вы отправить трассировку для этой ошибки и вывод 'repr (ServiceSubCategory.objects.values_list)'. Кроме того, вы после списка строк JSON или списка, преобразованного в JSON (как этот ответ пытается)? – mhawke

+0

Обновлен ответ с отслеживанием, и я думаю, было бы лучше, если бы я получил значения JSON как строку –

Смежные вопросы