diff --git a/rest_framework/fields.py b/rest_framework/fields.py index a1d99bd88..38db39287 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1544,7 +1544,11 @@ class JSONField(Field): def to_representation(self, value): if self.binary: - return json.dumps(value) + value = json.dumps(value) + # On python 2.x the return type for json.dumps() is underspecified. + # On python 3.x json.dumps() returns unicode strings. + if isinstance(value, six.text_type): + value = bytes(value.encode('utf-8')) return value diff --git a/tests/test_fields.py b/tests/test_fields.py index 270a0f652..bcd65a1a6 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1562,7 +1562,7 @@ class TestBinaryJSONField(FieldValues): Values for `JSONField` with binary=True. """ valid_inputs = [ - ('{"a": 1, "3": null, "b": ["some", "list", true, 1.23]}', { + (b'{"a": 1, "3": null, "b": ["some", "list", true, 1.23]}', { 'a': 1, 'b': ['some', 'list', True, 1.23], '3': None @@ -1576,7 +1576,7 @@ class TestBinaryJSONField(FieldValues): 'a': 1, 'b': ['some', 'list', True, 1.23], '3': None - }, '{"a": 1, "3": null, "b": ["some", "list", true, 1.23]}'), + }, b'{"a": 1, "3": null, "b": ["some", "list", true, 1.23]}'), ] field = serializers.JSONField(binary=True)