"Не подлежит сериализации в формат 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
Есть идеи, как это исправить?
1 ответ(ов)
Ваш код выглядит почти правильно, но обратите внимание на несколько моментов, которые могут помочь улучшить его. Ниже приведён исправленный пример:
from django.http import JsonResponse
class CountryListView(ListView):
model = Country
def render_to_response(self, context, **response_kwargs):
country_codes = list(self.get_queryset().values_list('code', flat=True))
return JsonResponse(country_codes, safe=False)
- Я заменил
HttpResponse
сjson.dumps
наJsonResponse
, который автоматически обрабатывает сериализацию в JSON, делая код более чистым и понятным. - Используйте параметр
safe=False
вJsonResponse
, когда вы возвращаете список, так как по умолчаниюJsonResponse
ожидает словарь для достижения безопасности. - Обратите внимание, что
mimetype
устарел. Вместо него стоит использоватьContent-Type
, который автоматически устанавливается вJsonResponse
.
Если проблема была связана с выводом данных в неверном формате, этот исправленный код должен её решить.
Создание JSON-ответа с использованием Django и Python
Django Rest Framework: порядок вложенных сериализаторов
'pip' не распознан как командa внутреннего или внешнего формата
Преобразование строки даты JSON в datetime в Python
PIL / JPEG библиотека: "декодировщик JPEG недоступен"