From: Ciro Scognamiglio Date: Wed, 26 Feb 2014 14:00:14 +0000 (+0100) Subject: json serialization handles datetime and decimal numbers X-Git-Tag: myslice-1.1~294 X-Git-Url: http://git.onelab.eu/?p=unfold.git;a=commitdiff_plain;h=7871c58de1b95f8d625c26c967dd72eb9430dcab json serialization handles datetime and decimal numbers --- diff --git a/rest/__init__.py b/rest/__init__.py index 6e4edc7e..58fec2cb 100644 --- a/rest/__init__.py +++ b/rest/__init__.py @@ -13,6 +13,16 @@ from string import join import json +# handles serialization of datetime in json +DateEncoder = lambda obj: obj.strftime("%B %d, %Y %H:%M:%S") if isinstance(obj, datetime.datetime) else None + +# handles decimal numbers serialization in json +class DecimalEncoder(json.JSONEncoder): + def _iterencode(self, o, markers=None): + if isinstance(o, decimal.Decimal): + return (str(o) for o in [o]) + return super(DecimalEncoder, self)._iterencode(o, markers) + def dispatch(request, object_type, object_name): switch = { @@ -79,7 +89,7 @@ def send(request, response, object_properties): response_data['data'].append(d) - return HttpResponse(json.dumps(response_data), content_type="application/json") + return HttpResponse(json.dumps(response_data, cls=DecimalEncoder, default=DateEncoder), content_type="application/json") def error(request, object_name, object_properties): return HttpResponse(json.dumps({'error' : 'an error has occurred'}), content_type="application/json") \ No newline at end of file