JHeasly wrote: > Hello all, > > I'm following the "Serializing Django objects" documentation and have a > view pretty much verbatim from the docs: > > def my_json_view(request): > data = serializers.serialize("json", Location.objects.all()) > return HttpResponse(data, mimetype='text/javascript') > > My Location model includes decimal latitude and longitude data. When I > test the above view using the Django shell, it works, but when I try it > via a browser request, I get this: > > Decimal("44.048708") is not JSON serializable > Request Method: GET > Request URL: http://www.my_url.com/maps/json/ > Exception Type: TypeError > Exception Value: Decimal("44.048708") is not JSON serializable > Exception Location: ... [snip] ... > /django/utils/simplejson/encoder.py in default, line 258 > > Also, the above will works via the browser when I specify "xml" as the > serialization format. The "json" format just doesn't like my decimals. > What am I doing wrong? > > Thanks for any guidance, > John
Its just a case that isn't handled in django.utils.simplejson.encoder.py. I'm not really sure the "right" way to implement it but you could just change line 176 in _iterencode() from: 176 elif isinstance(key, float): 177 key = floatstr(key, allow_nan) to 176 elif isinstance(key, float) or isinstance(key, decimal.Decimal): 177 key = floatstr(key, allow_nan) But I also think JSONEncoder is meant to be subclassed for these types of cases. I was just surprised to see that things like Decimal and date weren't handled since these are so common as return types from the DB-API. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---