__init__.py revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)r""" 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)A simple, fast, extensible JSON encoder and decoder 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)JSON (JavaScript Object Notation) <http://json.org> is a subset of 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)interchange format. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)simplejson exposes an API familiar to uses of the standard library 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)marshal and pickle modules. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Encoding basic Python object hierarchies:: 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> import simplejson 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> simplejson.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '["foo", {"bar": ["baz", null, 1.0, 2]}]' 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> print simplejson.dumps("\"foo\bar") 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"foo\bar" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> print simplejson.dumps(u'\u1234') 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\u1234" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> print simplejson.dumps('\\') 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\\" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> print simplejson.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"a": 0, "b": 0, "c": 0} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> from StringIO import StringIO 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> io = StringIO() 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> simplejson.dump(['streaming API'], io) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> io.getvalue() 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '["streaming API"]' 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Compact encoding:: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> import simplejson 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> simplejson.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':')) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '[1,2,3,{"4":5,"6":7}]' 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Pretty printing:: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> import simplejson 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> print simplejson.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "4": 5, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "6": 7 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Decoding JSON:: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> import simplejson 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> simplejson.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [u'foo', {u'bar': [u'baz', None, 1.0, 2]}] 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> simplejson.loads('"\\"foo\\bar"') 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) u'"foo\x08ar' 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> from StringIO import StringIO 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> io = StringIO('["streaming API"]') 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> simplejson.load(io) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [u'streaming API'] 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Specializing JSON object decoding:: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> import simplejson 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> def as_complex(dct): 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... if '__complex__' in dct: 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... return complex(dct['real'], dct['imag']) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... return dct 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> simplejson.loads('{"__complex__": true, "real": 1, "imag": 2}', 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... object_hook=as_complex) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (1+2j) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Extending JSONEncoder:: 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> import simplejson 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> class ComplexEncoder(simplejson.JSONEncoder): 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... def default(self, obj): 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... if isinstance(obj, complex): 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... return [obj.real, obj.imag] 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... return simplejson.JSONEncoder.default(self, obj) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ... 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> dumps(2 + 1j, cls=ComplexEncoder) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '[2.0, 1.0]' 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> ComplexEncoder().encode(2 + 1j) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '[2.0, 1.0]' 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >>> list(ComplexEncoder().iterencode(2 + 1j)) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ['[', '2.0', ', ', '1.0', ']'] 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Note that the JSON produced by this module's default settings 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)is a subset of YAML, so it may be used as a serializer for that as well. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)__version__ = '1.7.3' 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)__all__ = [ 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'dump', 'dumps', 'load', 'loads', 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'JSONDecoder', 'JSONEncoder', 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)] 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from decoder import JSONDecoder 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from encoder import JSONEncoder 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_default_encoder = JSONEncoder( 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) skipkeys=False, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ensure_ascii=True, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_circular=True, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_nan=True, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indent=None, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) separators=None, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encoding='utf-8' 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_nan=True, cls=None, indent=None, separators=None, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encoding='utf-8', **kw): 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Serialize ``obj`` as a JSON formatted stream to ``fp`` (a 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``.write()``-supporting file-like object). 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) will be skipped instead of raising a ``TypeError``. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``ensure_ascii`` is ``False``, then the some chunks written to ``fp`` 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) may be ``unicode`` instances, subject to normal Python ``str`` to 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``unicode`` coercion rules. Unless ``fp.write()`` explicitly 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) understands ``unicode`` (as in ``codecs.getwriter()``) this is likely 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to cause an error. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``check_circular`` is ``False``, then the circular reference check 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for container types will be skipped and a circular reference will 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result in an ``OverflowError`` (or worse). 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in strict compliance of the JSON specification, instead of using the 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``indent`` is a non-negative integer, then JSON array elements and object 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) members will be pretty-printed with that indent level. An indent level 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) of 0 will only insert newlines. ``None`` is the most compact representation. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``separators`` is an ``(item_separator, dict_separator)`` tuple 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then it will be used instead of the default ``(', ', ': ')`` separators. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``(',', ':')`` is the most compact JSON representation. 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``encoding`` is the character encoding for str instances, default is UTF-8. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``.default()`` method to serialize additional types), specify it with 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) the ``cls`` kwarg. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # cached encoder 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (skipkeys is False and ensure_ascii is True and 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_circular is True and allow_nan is True and 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cls is None and indent is None and separators is None and 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encoding == 'utf-8' and not kw): 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iterable = _default_encoder.iterencode(obj) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if cls is None: 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cls = JSONEncoder 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_circular=check_circular, allow_nan=allow_nan, indent=indent, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) separators=separators, encoding=encoding, **kw).iterencode(obj) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # could accelerate with writelines in some versions of Python, at 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # a debuggability cost 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for chunk in iterable: 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fp.write(chunk) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_nan=True, cls=None, indent=None, separators=None, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encoding='utf-8', **kw): 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Serialize ``obj`` to a JSON formatted ``str``. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) will be skipped instead of raising a ``TypeError``. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``ensure_ascii`` is ``False``, then the return value will be a 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``unicode`` instance subject to normal Python ``str`` to ``unicode`` 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) coercion rules instead of being escaped to an ASCII ``str``. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``check_circular`` is ``False``, then the circular reference check 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for container types will be skipped and a circular reference will 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result in an ``OverflowError`` (or worse). 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strict compliance of the JSON specification, instead of using the 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``indent`` is a non-negative integer, then JSON array elements and 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) object members will be pretty-printed with that indent level. An indent 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) level of 0 will only insert newlines. ``None`` is the most compact 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) representation. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``separators`` is an ``(item_separator, dict_separator)`` tuple 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then it will be used instead of the default ``(', ', ': ')`` separators. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``(',', ':')`` is the most compact JSON representation. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``encoding`` is the character encoding for str instances, default is UTF-8. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``.default()`` method to serialize additional types), specify it with 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) the ``cls`` kwarg. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # cached encoder 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (skipkeys is False and ensure_ascii is True and 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_circular is True and allow_nan is True and 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cls is None and indent is None and separators is None and 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encoding == 'utf-8' and not kw): 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return _default_encoder.encode(obj) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if cls is None: 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cls = JSONEncoder 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cls( 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) skipkeys=skipkeys, ensure_ascii=ensure_ascii, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_circular=check_circular, allow_nan=allow_nan, indent=indent, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) separators=separators, encoding=encoding, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **kw).encode(obj) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_default_decoder = JSONDecoder(encoding=None, object_hook=None) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def load(fp, encoding=None, cls=None, object_hook=None, **kw): 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Deserialize ``fp`` (a ``.read()``-supporting file-like object containing 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) a JSON document) to a Python object. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If the contents of ``fp`` is encoded with an ASCII based encoding other 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) than utf-8 (e.g. latin-1), then an appropriate ``encoding`` name must 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) be specified. Encodings that are not ASCII based (such as UCS-2) are 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) not allowed, and should be wrapped with 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``codecs.getreader(fp)(encoding)``, or simply decoded to a ``unicode`` 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) object and passed to ``loads()`` 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``object_hook`` is an optional function that will be called with the 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result of any object literal decode (a ``dict``). The return value of 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``object_hook`` will be used instead of the ``dict``. This feature 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) can be used to implement custom decoders (e.g. JSON-RPC class hinting). 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kwarg. 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loads(fp.read(), 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encoding=encoding, cls=cls, object_hook=object_hook, **kw) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def loads(s, encoding=None, cls=None, object_hook=None, **kw): 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document) to a Python object. 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) If ``s`` is a ``str`` instance and is encoded with an ASCII based encoding 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) other than utf-8 (e.g. latin-1) then an appropriate ``encoding`` name 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) must be specified. Encodings that are not ASCII based (such as UCS-2) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) are not allowed and should be decoded to ``unicode`` first. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``object_hook`` is an optional function that will be called with the 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result of any object literal decode (a ``dict``). The return value of 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ``object_hook`` will be used instead of the ``dict``. This feature 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) can be used to implement custom decoders (e.g. JSON-RPC class hinting). 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kwarg. 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if cls is None and encoding is None and object_hook is None and not kw: 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return _default_decoder.decode(s) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if cls is None: 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cls = JSONDecoder 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if object_hook is not None: 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kw['object_hook'] = object_hook 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cls(encoding=encoding, **kw).decode(s) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def read(s): 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) json-py API compatibility hook. Use loads(s) instead. 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import warnings 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warnings.warn("simplejson.loads(s) should be used instead of read(s)", 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeprecationWarning) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loads(s) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def write(obj): 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) json-py API compatibility hook. Use dumps(s) instead. 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import warnings 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warnings.warn("simplejson.dumps(s) should be used instead of write(s)", 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeprecationWarning) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dumps(obj) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 288