2013-05-06 3 views
0

на мой взгляд, почему это работает:Джанго simplejson [] не JSON сериализации

results = [] 
results.append({'status':1}) 
results.append({'bookmarks':[]}) 
simplejson.dumps(results) 
# produces: [] 

и это не делает:

from myapp.models import Bookmark 
results = [] 
results.append({'status':1}) 
results.append({'bookmarks':Bookmark.objects.all()}) 
# fails with exception saying: [] is not JSON serializable 

полностью трассировки стека следует

Traceback: 
File "/Users/Ishaq/Projects/github/bookmarks/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/Users/Ishaq/Projects/github/bookmarks/bookmarks/views.py" in index 
    9. return HttpResponse(simplejson.dumps(Bookmark.objects.all()), mimetype='application/json'); 
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py" in dumps 
    231.   return _default_encoder.encode(obj) 
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py" in encode 
    201.   chunks = self.iterencode(o, _one_shot=True) 
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py" in iterencode 
    264.   return _iterencode(o, 0) 
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py" in default 
    178.   raise TypeError(repr(o) + " is not JSON serializable") 

Exception Type: TypeError at /conferences/ 
Exception Value: [] is not JSON serializable 
+0

'simplejson.dumps (списка (Bookmark.objects.all()))' –

ответ

1

Я ждал Бурхан Халид, чтобы превратить свой комментарий в ответ, но так как он не имеет, я бы.

использования simplejson.dumps(list(Bookmark.objects.all())) сделал работу

2

Вместо использования simplejson для сериализации объектов django используйте s erialization provided by django.

со ссылкой форме ссылки, вы можете сделать:

from django.core import serializers 
data = serializers.serialize("json", Bookmark.objects.all()) 
+0

на самом деле я должен сделать пользовательский объект JSON вместо демпинга только модели. и документы были неясны в этом. – 2013-05-06 06:03:42

+1

@ishaq, Но ваш вопрос так не говорит. Вы пытаетесь сериализовать 'Bookmark.objects.all()'. – Rohan

+0

обновил мой вопрос :-) – 2013-05-06 06:40:18

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