2
Serialize data to/from JSON
6
from StringIO import StringIO
8
from django.core.serializers.python import Serializer as PythonSerializer
9
from django.core.serializers.python import Deserializer as PythonDeserializer
10
from django.utils import datetime_safe
11
from django.utils import simplejson
16
from django.utils import _decimal as decimal # Python 2.3 fallback
18
class Serializer(PythonSerializer):
20
Convert a queryset to JSON.
22
internal_use_only = False
24
def end_serialization(self):
25
self.options.pop('stream', None)
26
self.options.pop('fields', None)
27
simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
30
if callable(getattr(self.stream, 'getvalue', None)):
31
return self.stream.getvalue()
33
def Deserializer(stream_or_string, **options):
35
Deserialize a stream or string of JSON data.
37
if isinstance(stream_or_string, basestring):
38
stream = StringIO(stream_or_string)
40
stream = stream_or_string
41
for obj in PythonDeserializer(simplejson.load(stream)):
44
class DjangoJSONEncoder(simplejson.JSONEncoder):
46
JSONEncoder subclass that knows how to encode date/time and decimal types.
49
DATE_FORMAT = "%Y-%m-%d"
50
TIME_FORMAT = "%H:%M:%S"
53
if isinstance(o, datetime.datetime):
54
d = datetime_safe.new_datetime(o)
55
return d.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT))
56
elif isinstance(o, datetime.date):
57
d = datetime_safe.new_date(o)
58
return d.strftime(self.DATE_FORMAT)
59
elif isinstance(o, datetime.time):
60
return o.strftime(self.TIME_FORMAT)
61
elif isinstance(o, decimal.Decimal):
64
return super(DjangoJSONEncoder, self).default(o)
66
# Older, deprecated class name (for backwards compatibility purposes).
67
DateTimeAwareJSONEncoder = DjangoJSONEncoder