Change Log

Version 1.0 - September 1, 2018

  • NOTE jsonpickle no longer supports Python2.6, or Python3 < 3.4. The officially supported Python versions are now 2.7 and 3.4+.

  • Improved Pandas and Numpy support. (#227,

  • Improved support for pickling iterators. (#216,

  • Better support for the stdlib json module when simplejson is not installed. (#217,

  • jsonpickle will now output python3-style module names when pickling builtins methods or functions. (#223,

  • jsonpickle will always flatten primitives, even when max_depth is reached, which avoids encoding unicode strings into their u'string' representation.

    (#180, #176).

  • Nested classes are now supported on Python 3. (#180, #176).

  • Better support for older (pre-1.9) versions of numpy (#195).

Version 0.9.6 - February 9, 2018

  • Better support for SQLAlchemy (#180).
  • Better support for NumPy and SciKit-Learn. (#184).
  • Better support for dict sub-classes (#156).

Version 0.9.5 - July 16, 2017

  • Better support for objects that implement the reduce protocol. (#170). This backward-incompatible change removes the SimpleReduceHandler. Any projects registering that handler for a particular type should instead remove references to the handler and jsonpickle will now handle those types directly.

Version 0.9.4 - January 10, 2017

  • Arbitrary byte streams are now better supported. (#143).
  • Better support for NumPy data types. The Python3 NumPy support is especially robust.
  • Fortran-ordered based NumPy arrays are now properly serialized.

Version 0.9.3 - March 9, 2016

  • UUID objects can now be serialized (#130).
  • Added set_decoder_options method to allow decoder specific options equal to set_encoder_options.
  • Int keys can be encoded directly by e.g. demjson by passing numeric_keys=True and setting its backend options via jsonpickle.set_encoder_options(‘demjson’, strict=False).
  • Newer Numpy versions (v1.10+) are now supported.

Version 0.9.2 - March 20, 2015

  • Fixes for serializing objects with custom handlers.
  • We now properly serialize deque objects constructed with a maxlen parameter.
  • Test suite fixes

Version 0.9.1 - March 15, 2015

  • Support datetime objects with FixedOffsets.

Version 0.9.0 - January 16, 2015

  • Support for Pickle Protocol v4.
  • We now support serializing defaultdict subclasses that use self as their default factory.
  • We now have a decorator syntax for registering custom handlers, and allow custom handlers to register themselves for all subclasses. (#104).
  • We now support serializing types with metaclasses and their instances (e.g., Python 3 enum).
  • We now support serializing bytestrings in both Python 2 and Python 3. In Python 2, the str type is decoded to UTF-8 whenever possible and serialized as a true bytestring elsewise; in Python 3, bytestrings are explicitly encoded/decoded as bytestrings. Unicode strings are always encoded as is in both Python 2 and Python 3.
  • Added support for serializing numpy arrays, dtypes and scalars (see jsonpickle.ext.numpy module).

Version 0.8.0 - September 6, 2014

  • We now support serializing objects that contain references to module-level functions (#77).
  • Better Pickle Protocol v2 support (#78).
  • Support for string __slots__ and iterable __slots__ (#67) (#68).
  • encode() now has a warn option that makes jsonpickle emit warnings when encountering objects that cannot be pickled.
  • A Javascript implementation of jsonpickle is now included in the jsonpickleJS directory.

Version 0.7.2 - August 6, 2014

  • We now properly serialize classes that inherit from classes that use __slots__ and add additional slots in the derived class.
  • jsonpickle can now serialize objects that implement __getstate__() but not __setstate__(). The result of __getstate__() is returned as-is when doing a round-trip from Python objects to jsonpickle and back.
  • Better support for collections.defaultdict with custom factories.
  • Added support for queue.Queue objects.

Version 0.7.1 - May 6, 2014

  • Added support for Python 3.4.
  • Added support for posix.stat_result.

Version 0.7.0 - March 15, 2014

  • Added handles decorator to jsonpickle.handlers.BaseHandler, enabling simple declaration of a handler for a class.
  • __getstate__() and __setstate__() are now honored when pickling objects that subclass dict.
  • jsonpickle can now serialize collections.Counter objects.
  • Object references are properly handled when using integer keys.
  • Object references are now supported when using custom handlers.
  • Decimal objects are supported in Python 3.
  • jsonpickle’s “fallthrough-on-error” behavior can now be disabled.
  • Simpler API for registering custom handlers.
  • A new “safe-mode” is provided which avoids eval(). Backwards-compatible deserialization of repr-serialized objects is disabled in this mode. e.g. decode(string, safe=True)

Version 0.6.1 - August 25, 2013

  • Python 3.2 support, and additional fixes for Python 3.

Version 0.6.0 - August 24, 2013

  • Python 3 support!
  • time.struct_time is now serialized using the built-in jsonpickle.handlers.SimpleReduceHandler.

Version 0.5.0 - August 22, 2013

  • Non-string dictionary keys (e.g. ints, objects) are now supported by passing keys=True to jsonpickle.encode() and jsonpickle.decode().
  • We now support namedtuple, deque, and defaultdict.
  • Datetimes with timezones are now fully supported.
  • Better support for complicated structures e.g. datetime inside dicts.
  • jsonpickle added support for references and cyclical data structures in 0.4.0. This can be disabled by passing make_refs=False to jsonpickle.encode().

Version 0.4.0 - June 21, 2011

  • Switch build from setuptools to distutils
  • Consistent dictionary key ordering
  • Fix areas with improper support for unpicklable=False
  • Added support for cyclical data structures (#16).
  • Experimental support for jsonlib and py-yajl backends.
  • New contributers David K. Hess and Alec Thomas


To support cyclical data structures (#16), the storage format has been modified. Efforts have been made to ensure backwards-compatibility. jsonpickle 0.4.0 can read data encoded by jsonpickle 0.3.1, but earlier versions of jsonpickle may be unable to read data encoded by jsonpickle 0.4.0.

Version 0.3.1 - December 12, 2009

  • Include tests and docs directories in sdist for distribution packages.

Version 0.3.0 - December 11, 2009

  • List and set subclasses.
  • Objects with module references.
  • Newstyle classes with __slots__.
  • Objects implementing __setstate__() and __getstate__() (follows the pickle protocol).
  • Improved support for Zope objects via pre-fetch.
  • Support for user-defined serialization handlers via the jsonpickle.handlers registry.
  • Removed cjson support per John Millikin’s recommendation.
  • General improvements to style, including PEP 257 compliance and refactored project layout.
  • Steps towards Python 2.3 and Python 3 support.
  • New contributors Dan Buch and Ian Schenck.
  • Thanks also to Kieran Darcy, Eoghan Murray, and Antonin Hildebrand for their assistance!

Version 0.2.0 - January 10, 2009

  • Support for all major Python JSON backends (including json in Python 2.6, simplejson, cjson, and demjson)
  • Handle several datetime objects using the repr() of the objects (Thanks to Antonin Hildebrand).
  • Sphinx documentation
  • Added support for recursive data structures
  • Unicode dict-keys support
  • Support for Google App Engine and Django
  • Tons of additional testing and bug reports (Antonin Hildebrand, Sorin, Roberto Saccon, Faber Fedor, FirePython, and Joose)

Version 0.1.0 - August 21, 2008

  • Added long as basic primitive (thanks Adam Fisk)
  • Prefer python-cjson to simplejson, if available
  • Major API change, use python-cjson’s decode/encode instead of simplejson’s load/loads/dump/dumps
  • Added to compare simplejson and python-cjson

Version 0.0.5 - July 21, 2008

  • Changed prefix of special fields to conform with CouchDB requirements (Thanks Dean Landolt). Break backwards compatibility.
  • Moved to Google Code subversion
  • Fixed unit test imports

Version 0.0.3

  • Convert back to from (issue found by spidaman)

Version 0.0.2

  • Handle feedparser’s FeedParserDict
  • Converted project to Paver
  • Restructured directories
  • Increase test coverage

Version 0.0.1

Initial release