diff options
| author | Lukas Hetzenecker <lukas@splots.co> | 2015-06-23 22:56:22 +0200 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2015-06-24 18:41:25 +0200 |
| commit | 6355a6d4f59eb220e05130d179beba7bb29c88af (patch) | |
| tree | 2dfe2741a131947efc91ae93a34b2cfe208ad461 | |
| parent | c078021555dcda6b12363b5b0646eac5332a0d86 (diff) | |
Fixed #25019 -- Added UUID support in DjangoJSONEncoder
| -rw-r--r-- | django/core/serializers/json.py | 5 | ||||
| -rw-r--r-- | tests/httpwrappers/tests.py | 6 |
2 files changed, 10 insertions, 1 deletions
diff --git a/django/core/serializers/json.py b/django/core/serializers/json.py index f67295edf9..764640465d 100644 --- a/django/core/serializers/json.py +++ b/django/core/serializers/json.py @@ -8,6 +8,7 @@ from __future__ import absolute_import, unicode_literals import datetime import decimal import json +import uuid import sys from django.core.serializers.base import DeserializationError @@ -86,7 +87,7 @@ def Deserializer(stream_or_string, **options): class DjangoJSONEncoder(json.JSONEncoder): """ - JSONEncoder subclass that knows how to encode date/time and decimal types. + JSONEncoder subclass that knows how to encode date/time, decimal types and UUIDs. """ def default(self, o): # See "Date Time String Format" in the ECMA-262 specification. @@ -108,6 +109,8 @@ class DjangoJSONEncoder(json.JSONEncoder): return r elif isinstance(o, decimal.Decimal): return str(o) + elif isinstance(o, uuid.UUID): + return str(o) else: return super(DjangoJSONEncoder, self).default(o) diff --git a/tests/httpwrappers/tests.py b/tests/httpwrappers/tests.py index 3f641da89b..84d65ad801 100644 --- a/tests/httpwrappers/tests.py +++ b/tests/httpwrappers/tests.py @@ -6,6 +6,7 @@ import json import os import pickle import unittest +import uuid from django.core.exceptions import SuspiciousOperation from django.core.serializers.json import DjangoJSONEncoder @@ -480,6 +481,11 @@ class JsonResponseTests(SimpleTestCase): response = JsonResponse(['foo', 'bar'], safe=False) self.assertEqual(json.loads(response.content.decode()), ['foo', 'bar']) + def test_json_response_uuid(self): + u = uuid.uuid4() + response = JsonResponse(u, safe=False) + self.assertEqual(json.loads(response.content.decode()), str(u)) + def test_json_response_custom_encoder(self): class CustomDjangoJSONEncoder(DjangoJSONEncoder): def encode(self, o): |
