0

I have a django backend and from my view I want to return a list of json objects.

@api_view(('GET',))
def get_analytics(request):
    # Number of users who dogged in once to our system today
    login_count=  User.objects.filter(last_login__startswith=
        timezone.now().date()).count() # returns int
    finished_count = Exercise_state.objects.filter(exercise_id=7, progress=2).count()
    # returns int

    count_list=[]
    count_list.append(login_count)
    count_list.append(finished_count)

    data = {}
    data['login_count'] = login_count
    data['finish_count'] = finished_count
    json_data = json.dumps(data)

    return Response(json_data)

This returns "{\"finish_count\": 1, \"login_count\": 2}" However what I want is something like [{"login_count": 2, "finished_count": 3}]

How can I achieve this?

2 Answers 2

2

You need JsonResponse. But if you are going to use it you don't need json.dumps(data), JsonResponse dose it for you. Quoting from django doc:

>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
b'{"foo": "bar"}'

If you are using django < 1.7, do(it's still available in later versions, but JsonResponse makes it eaiser):

return HttpResponse(json.dumps(data), content_type="application/json")
Sign up to request clarification or add additional context in comments.

Comments

1

Use JsonResponse instead, to properly parse the json object:

from django.http import JsonResponse

then, you can use your original dict object:

return JsonResponse(data) 

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.