Opened 7 years ago
Closed 7 years ago
#29420 closed Bug (duplicate)
Single quote in json bytes from RequestFactory
| Reported by: | Dunatotatos | Owned by: | nobody |
|---|---|---|---|
| Component: | Testing framework | Version: | 2.0 |
| Severity: | Normal | Keywords: | requestfactory, json |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Hi all,
If we use RequestFactory to build a JSON request, the body of the request is built with single quotes instead of double-quotes. However, According to ECMA-404, chapter 9-String:
A string is a sequence of Unicode code points wrapped with quotation marks (U+0022).
Using the standard json library to load this payload raises an Exception.
Here is a MVP to run in a Django console:
>>> import json
>>> from django.test import RequestFactory
>>>
>>> data = {'key': 'value'}
>>> request = RequestFactory().post('/', data, content_type='application/json')
>>> request.body # Here, we see the JSON has been encoded with single quotes.
b"{'key': 'value'}"
>>> json.loads(request.body) # And json.loads refuses the single quote
Traceback (most recent call last):
[...]
json.decoder.JSONDecoder: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
If this is an expected behavior, it should probably be documented somewhere in this page, as well as how to POST a JSON request. Except if I miss something, of course.
Should be fixed in Django 2.1 (see #29082).