Класс JsonResponse

Класс JsonResponse наследуется от HttpResponse и предназначен для создания JSON-ответов в Django. Он принимает на вход данные, которые автоматически сериализуются в JSON с помощью стандартного модуля json. В качестве первого аргумента передается словарь или список, который будет преобразован в JSON-строку. Класс автоматически устанавливает заголовок Content-Type в значение 'application/json'.

Основные параметры конструктора:

Синтаксис

pythonfrom django.http import JsonResponse

return JsonResponse(data, safe=True, json_dumps_params=None, encoder=None)

Пример

Создадим простой JSON-ответ с данными о пользователе:

pythonfrom django.http import JsonResponse

def user_profile(request):
  data = {
    "username": "john_doe",
    "email": "john@example.com",
    "age": 25,
    "is_active": True
  }
  return JsonResponse(data)

Результат выполнения кода:

python{"username": "john_doe", "email": "john@example.com", "age": 25, "is_active": true}

Пример

Отправим JSON-ответ со статусом операции и списком данных:

pythonfrom django.http import JsonResponse
from myapp.models import Article

def article_list(request):
  articles = Article.objects.all().values("id", "title", "status")
  data = {
    "status": "success",
    "count": articles.count(),
    "results": list(articles)
  }
  return JsonResponse(data)

Результат выполнения кода:

python{"status": "success", "count": 2, "results": [{"id": 1, "title": "article 1", "status": "published"}, {"id": 2, "title": "article 2", "status": "draft"}]}

Пример

Используем параметр json_dumps_params для форматирования вывода:

pythonfrom django.http import JsonResponse

def pretty_json_response(request):
  data = {
    "name": "Django",
    "version": "5.0",
    "features": ["ORM", "Templates", "Admin"]
  }
  return JsonResponse(data, json_dumps_params={"indent": 4})

Результат выполнения кода:

python{
  "name": "Django",
  "version": "5.0",
  "features": ["ORM", "Templates", "Admin"]
}

Пример

Отправим список объектов (не словарь) с параметром safe=False:

pythonfrom django.http import JsonResponse

def article_titles(request):
  titles = ["article 1", "article 2", "article 3"]
  return JsonResponse(titles, safe=False)

Результат выполнения кода:

python["article 1", "article 2", "article 3"]

Пример

Используем параметр encoder для поддержки специфических типов данных:

pythonfrom django.http import JsonResponse
from datetime import datetime
import json

class CustomJSONEncoder(json.JSONEncoder):
  def default(self, obj):
    if isinstance(obj, datetime):
      return obj.isoformat()
    return super().default(obj)

def article_with_date(request):
  data = {
    "title": "article",
    "created_at": datetime.now()
  }
  return JsonResponse(data, encoder=CustomJSONEncoder)

Результат выполнения кода:

python{"title": "article", "created_at": "2026-09-07T15:30:45.123456"}

Смотрите также

  • класс HttpResponse,
    базовый класс для всех HTTP-ответов в Django
  • класс FileResponse,
    который используется для отправки файлов в ответе
  • класс StreamingHttpResponse,
    который используется для потоковой передачи данных
  • класс HttpResponseRedirect,
    который используется для перенаправлений