0

"Не подлежит сериализации в формат JSON"

17

У меня есть следующий 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 ответ(ов)

0

Ваш код выглядит почти правильно, но обратите внимание на несколько моментов, которые могут помочь улучшить его. Ниже приведён исправленный пример:

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)
  1. Я заменил HttpResponse с json.dumps на JsonResponse, который автоматически обрабатывает сериализацию в JSON, делая код более чистым и понятным.
  2. Используйте параметр safe=False в JsonResponse, когда вы возвращаете список, так как по умолчанию JsonResponse ожидает словарь для достижения безопасности.
  3. Обратите внимание, что mimetype устарел. Вместо него стоит использовать Content-Type, который автоматически устанавливается в JsonResponse.

Если проблема была связана с выводом данных в неверном формате, этот исправленный код должен её решить.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь