JSON 시리얼화 불가
다음과 같은 List View가 있습니다.
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
좋은 생각 있어요?
메서드는 실제로 목록을 반환하는 것이 아니라 유형의 개체를 반환한다는 점에 유의해야 합니다.django.db.models.query.ValuesListQuerySet
Django의 느린 평가 목표를 유지하기 위해, 즉 '목록'을 생성하는 데 필요한 DB 쿼리는 개체가 평가될 때까지 실제로 수행되지 않습니다.
하지만 좀 짜증나게도 이 물건에는__repr__
출력할 때 목록처럼 보이도록 하는 방법이기 때문에 개체가 목록이 아닌 것이 항상 명확하지는 않습니다.
질문의 예외는 사용자 지정 개체를 JSON에서 직렬화할 수 없기 때문에 먼저 목록으로 변환해야 합니다.
my_list = list(self.get_queryset().values_list('code', flat=True))
...그러면 JSON으로 변환할 수 있습니다.
json_data = json.dumps(my_list)
또한 결과 JSON 데이터는HttpResponse
오브젝트, 그것은 분명히, 그것이 있어야 한다.Content-Type
의application/json
, 다음과 같이...
response = HttpResponse(json_data, content_type='application/json')
...기능에서 복귀할 수 있습니다.
class CountryListView(ListView):
model = Country
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.dumps(list(self.get_queryset().values_list('code', flat=True))),mimetype="application/json")
문제를 해결하다
mimtype도 중요합니다.
언급URL : https://stackoverflow.com/questions/16336271/is-not-json-serializable
'programing' 카테고리의 다른 글
wordpress is_home() | is_index()가 가능합니까? (0) | 2023.03.25 |
---|---|
리액트-라우터 1개만 자녀 (0) | 2023.03.25 |
Mongoose 한계/오프셋 및 카운트 쿼리 (0) | 2023.03.25 |
Angular의 지시문에서 지시문 추가JS (0) | 2023.03.25 |
angular-ui 부트스트랩(올바른 angular 방식으로 처리)을 갖춘 응답성 드롭다운형 내비게이션 바 (0) | 2023.03.25 |