On Tue, Jun 12, 2012 at 8:49 AM, Luke Plant <l.plant...@cantab.net> wrote: > > I agree my existing program had a bug. I had simplejson installed > because a dependency pulled it in (which means it can be difficult to > get rid of). > > The thing I was flagging up was that the release notes say "You can > safely change any use of django.utils.simplejson to json." I'm just > saying the two differences I've found probably warrant at least some > documentation. > > The second issue is difficult to argue as a bug in my program or > dependencies. Django has moved from a providing a JSONEncoder object > that supported a certain keyword argument to one that doesn't. We could > 'fix' it to some extent: > > class DjangoJSONEncoder(json.JSONEncoder): > def __init__(self, *args, **kwargs): > kwargs.pop('namedtuple_as_object') > super(DjangoJSONEncoder, self).__init__(*args, **kwargs) > > But like that, it would create more problems if the json module ever > gained that keyword argument in the future. >
Like loads(), json.JSONEncoder is just an alias for simplejson.JSONEncoder, and we need to support versions of simplejson down to 1.9 which is what python 2.6 ships with. This 'namedtuple_as_object' thing seems to only appear as of simplejson 2.2, which means that depending on it is a bug that appears on any system without a recent version of simplejson (for example, the version that was bundled with Django doesn't support it). Depending on this kwarg is a bug in Django, and should be fixed. https://github.com/simplejson/simplejson/blob/namedtuple-object-gh6/simplejson/encoder.py It's clear that people have begun to depend on the quirky ways in which simplejson diverged from its earlier codebase. I found the place where that unicode "proper behavior" was fixed, so apparently in Python's stdlib they undid the C optimizations at some point. So I was incorrect earlier, and the C speedups work "properly" with Python stdlib's patch. http://bugs.python.org/issue11982 Basically, anyone who depended on features of simplejson added after 1.9, or its wonky optimizations, already had arguably broken code in that it only worked when simplejson is installed. I'm torn as to whether we should add a note about these subtle problems when switching to json, recommend that people switch to simplejson instead, or undeprecate django.utils.simplejson as a necessary wart (we can still stop vendoring simplejson though). Best, Alex Ogier -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.