1d0825bca7fe65beaee391d30da42e937db621564Steve Blockr""" 2d0825bca7fe65beaee391d30da42e937db621564Steve BlockA simple, fast, extensible JSON encoder and decoder 3d0825bca7fe65beaee391d30da42e937db621564Steve Block 4d0825bca7fe65beaee391d30da42e937db621564Steve BlockJSON (JavaScript Object Notation) <http://json.org> is a subset of 5d0825bca7fe65beaee391d30da42e937db621564Steve BlockJavaScript syntax (ECMA-262 3rd edition) used as a lightweight data 6d0825bca7fe65beaee391d30da42e937db621564Steve Blockinterchange format. 7d0825bca7fe65beaee391d30da42e937db621564Steve Block 8d0825bca7fe65beaee391d30da42e937db621564Steve Blocksimplejson exposes an API familiar to uses of the standard library 9d0825bca7fe65beaee391d30da42e937db621564Steve Blockmarshal and pickle modules. 10d0825bca7fe65beaee391d30da42e937db621564Steve Block 11d0825bca7fe65beaee391d30da42e937db621564Steve BlockEncoding basic Python object hierarchies:: 12d0825bca7fe65beaee391d30da42e937db621564Steve Block 13d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> import simplejson 14d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> simplejson.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) 15d0825bca7fe65beaee391d30da42e937db621564Steve Block '["foo", {"bar": ["baz", null, 1.0, 2]}]' 16d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> print simplejson.dumps("\"foo\bar") 17d0825bca7fe65beaee391d30da42e937db621564Steve Block "\"foo\bar" 18d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> print simplejson.dumps(u'\u1234') 19d0825bca7fe65beaee391d30da42e937db621564Steve Block "\u1234" 20d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> print simplejson.dumps('\\') 21d0825bca7fe65beaee391d30da42e937db621564Steve Block "\\" 22d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> print simplejson.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True) 23d0825bca7fe65beaee391d30da42e937db621564Steve Block {"a": 0, "b": 0, "c": 0} 24d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> from StringIO import StringIO 25d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> io = StringIO() 26d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> simplejson.dump(['streaming API'], io) 27d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> io.getvalue() 28d0825bca7fe65beaee391d30da42e937db621564Steve Block '["streaming API"]' 29d0825bca7fe65beaee391d30da42e937db621564Steve Block 30d0825bca7fe65beaee391d30da42e937db621564Steve BlockCompact encoding:: 31d0825bca7fe65beaee391d30da42e937db621564Steve Block 32d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> import simplejson 33d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> simplejson.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':')) 34d0825bca7fe65beaee391d30da42e937db621564Steve Block '[1,2,3,{"4":5,"6":7}]' 35d0825bca7fe65beaee391d30da42e937db621564Steve Block 36d0825bca7fe65beaee391d30da42e937db621564Steve BlockPretty printing:: 37d0825bca7fe65beaee391d30da42e937db621564Steve Block 38d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> import simplejson 39d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> print simplejson.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4) 40d0825bca7fe65beaee391d30da42e937db621564Steve Block { 41d0825bca7fe65beaee391d30da42e937db621564Steve Block "4": 5, 42d0825bca7fe65beaee391d30da42e937db621564Steve Block "6": 7 43d0825bca7fe65beaee391d30da42e937db621564Steve Block } 44d0825bca7fe65beaee391d30da42e937db621564Steve Block 45d0825bca7fe65beaee391d30da42e937db621564Steve BlockDecoding JSON:: 46d0825bca7fe65beaee391d30da42e937db621564Steve Block 47d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> import simplejson 48d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> simplejson.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') 49d0825bca7fe65beaee391d30da42e937db621564Steve Block [u'foo', {u'bar': [u'baz', None, 1.0, 2]}] 50d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> simplejson.loads('"\\"foo\\bar"') 51d0825bca7fe65beaee391d30da42e937db621564Steve Block u'"foo\x08ar' 52d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> from StringIO import StringIO 53d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> io = StringIO('["streaming API"]') 54d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> simplejson.load(io) 55d0825bca7fe65beaee391d30da42e937db621564Steve Block [u'streaming API'] 56d0825bca7fe65beaee391d30da42e937db621564Steve Block 57d0825bca7fe65beaee391d30da42e937db621564Steve BlockSpecializing JSON object decoding:: 58d0825bca7fe65beaee391d30da42e937db621564Steve Block 59d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> import simplejson 60d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> def as_complex(dct): 61d0825bca7fe65beaee391d30da42e937db621564Steve Block ... if '__complex__' in dct: 62d0825bca7fe65beaee391d30da42e937db621564Steve Block ... return complex(dct['real'], dct['imag']) 63d0825bca7fe65beaee391d30da42e937db621564Steve Block ... return dct 64d0825bca7fe65beaee391d30da42e937db621564Steve Block ... 65d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> simplejson.loads('{"__complex__": true, "real": 1, "imag": 2}', 66d0825bca7fe65beaee391d30da42e937db621564Steve Block ... object_hook=as_complex) 67d0825bca7fe65beaee391d30da42e937db621564Steve Block (1+2j) 68d0825bca7fe65beaee391d30da42e937db621564Steve Block 69d0825bca7fe65beaee391d30da42e937db621564Steve BlockExtending JSONEncoder:: 70d0825bca7fe65beaee391d30da42e937db621564Steve Block 71d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> import simplejson 72d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> class ComplexEncoder(simplejson.JSONEncoder): 73d0825bca7fe65beaee391d30da42e937db621564Steve Block ... def default(self, obj): 74d0825bca7fe65beaee391d30da42e937db621564Steve Block ... if isinstance(obj, complex): 75d0825bca7fe65beaee391d30da42e937db621564Steve Block ... return [obj.real, obj.imag] 76d0825bca7fe65beaee391d30da42e937db621564Steve Block ... return simplejson.JSONEncoder.default(self, obj) 77d0825bca7fe65beaee391d30da42e937db621564Steve Block ... 78d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> dumps(2 + 1j, cls=ComplexEncoder) 79d0825bca7fe65beaee391d30da42e937db621564Steve Block '[2.0, 1.0]' 80d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> ComplexEncoder().encode(2 + 1j) 81d0825bca7fe65beaee391d30da42e937db621564Steve Block '[2.0, 1.0]' 82d0825bca7fe65beaee391d30da42e937db621564Steve Block >>> list(ComplexEncoder().iterencode(2 + 1j)) 83d0825bca7fe65beaee391d30da42e937db621564Steve Block ['[', '2.0', ', ', '1.0', ']'] 84d0825bca7fe65beaee391d30da42e937db621564Steve Block 85d0825bca7fe65beaee391d30da42e937db621564Steve Block 86d0825bca7fe65beaee391d30da42e937db621564Steve BlockNote that the JSON produced by this module's default settings 87d0825bca7fe65beaee391d30da42e937db621564Steve Blockis a subset of YAML, so it may be used as a serializer for that as well. 88d0825bca7fe65beaee391d30da42e937db621564Steve Block""" 89d0825bca7fe65beaee391d30da42e937db621564Steve Block__version__ = '1.7.3' 90d0825bca7fe65beaee391d30da42e937db621564Steve Block__all__ = [ 91d0825bca7fe65beaee391d30da42e937db621564Steve Block 'dump', 'dumps', 'load', 'loads', 92d0825bca7fe65beaee391d30da42e937db621564Steve Block 'JSONDecoder', 'JSONEncoder', 93d0825bca7fe65beaee391d30da42e937db621564Steve Block] 94d0825bca7fe65beaee391d30da42e937db621564Steve Block 95d0825bca7fe65beaee391d30da42e937db621564Steve Blockfrom decoder import JSONDecoder 96d0825bca7fe65beaee391d30da42e937db621564Steve Blockfrom encoder import JSONEncoder 97d0825bca7fe65beaee391d30da42e937db621564Steve Block 98d0825bca7fe65beaee391d30da42e937db621564Steve Block_default_encoder = JSONEncoder( 99d0825bca7fe65beaee391d30da42e937db621564Steve Block skipkeys=False, 100d0825bca7fe65beaee391d30da42e937db621564Steve Block ensure_ascii=True, 101d0825bca7fe65beaee391d30da42e937db621564Steve Block check_circular=True, 102d0825bca7fe65beaee391d30da42e937db621564Steve Block allow_nan=True, 103d0825bca7fe65beaee391d30da42e937db621564Steve Block indent=None, 104d0825bca7fe65beaee391d30da42e937db621564Steve Block separators=None, 105d0825bca7fe65beaee391d30da42e937db621564Steve Block encoding='utf-8' 106d0825bca7fe65beaee391d30da42e937db621564Steve Block) 107d0825bca7fe65beaee391d30da42e937db621564Steve Block 108d0825bca7fe65beaee391d30da42e937db621564Steve Blockdef dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, 109d0825bca7fe65beaee391d30da42e937db621564Steve Block allow_nan=True, cls=None, indent=None, separators=None, 110d0825bca7fe65beaee391d30da42e937db621564Steve Block encoding='utf-8', **kw): 111d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 112d0825bca7fe65beaee391d30da42e937db621564Steve Block Serialize ``obj`` as a JSON formatted stream to ``fp`` (a 113d0825bca7fe65beaee391d30da42e937db621564Steve Block ``.write()``-supporting file-like object). 114d0825bca7fe65beaee391d30da42e937db621564Steve Block 115d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types 116d0825bca7fe65beaee391d30da42e937db621564Steve Block (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``) 117d0825bca7fe65beaee391d30da42e937db621564Steve Block will be skipped instead of raising a ``TypeError``. 118d0825bca7fe65beaee391d30da42e937db621564Steve Block 119d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``ensure_ascii`` is ``False``, then the some chunks written to ``fp`` 120d0825bca7fe65beaee391d30da42e937db621564Steve Block may be ``unicode`` instances, subject to normal Python ``str`` to 121d0825bca7fe65beaee391d30da42e937db621564Steve Block ``unicode`` coercion rules. Unless ``fp.write()`` explicitly 122d0825bca7fe65beaee391d30da42e937db621564Steve Block understands ``unicode`` (as in ``codecs.getwriter()``) this is likely 123d0825bca7fe65beaee391d30da42e937db621564Steve Block to cause an error. 124d0825bca7fe65beaee391d30da42e937db621564Steve Block 125d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``check_circular`` is ``False``, then the circular reference check 126d0825bca7fe65beaee391d30da42e937db621564Steve Block for container types will be skipped and a circular reference will 127d0825bca7fe65beaee391d30da42e937db621564Steve Block result in an ``OverflowError`` (or worse). 128d0825bca7fe65beaee391d30da42e937db621564Steve Block 129d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to 130d0825bca7fe65beaee391d30da42e937db621564Steve Block serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) 131d0825bca7fe65beaee391d30da42e937db621564Steve Block in strict compliance of the JSON specification, instead of using the 132d0825bca7fe65beaee391d30da42e937db621564Steve Block JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). 133d0825bca7fe65beaee391d30da42e937db621564Steve Block 134d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``indent`` is a non-negative integer, then JSON array elements and object 135d0825bca7fe65beaee391d30da42e937db621564Steve Block members will be pretty-printed with that indent level. An indent level 136d0825bca7fe65beaee391d30da42e937db621564Steve Block of 0 will only insert newlines. ``None`` is the most compact representation. 137d0825bca7fe65beaee391d30da42e937db621564Steve Block 138d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``separators`` is an ``(item_separator, dict_separator)`` tuple 139d0825bca7fe65beaee391d30da42e937db621564Steve Block then it will be used instead of the default ``(', ', ': ')`` separators. 140d0825bca7fe65beaee391d30da42e937db621564Steve Block ``(',', ':')`` is the most compact JSON representation. 141d0825bca7fe65beaee391d30da42e937db621564Steve Block 142d0825bca7fe65beaee391d30da42e937db621564Steve Block ``encoding`` is the character encoding for str instances, default is UTF-8. 143d0825bca7fe65beaee391d30da42e937db621564Steve Block 144d0825bca7fe65beaee391d30da42e937db621564Steve Block To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the 145d0825bca7fe65beaee391d30da42e937db621564Steve Block ``.default()`` method to serialize additional types), specify it with 146d0825bca7fe65beaee391d30da42e937db621564Steve Block the ``cls`` kwarg. 147d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 148d0825bca7fe65beaee391d30da42e937db621564Steve Block # cached encoder 149d0825bca7fe65beaee391d30da42e937db621564Steve Block if (skipkeys is False and ensure_ascii is True and 150d0825bca7fe65beaee391d30da42e937db621564Steve Block check_circular is True and allow_nan is True and 151d0825bca7fe65beaee391d30da42e937db621564Steve Block cls is None and indent is None and separators is None and 152d0825bca7fe65beaee391d30da42e937db621564Steve Block encoding == 'utf-8' and not kw): 153d0825bca7fe65beaee391d30da42e937db621564Steve Block iterable = _default_encoder.iterencode(obj) 154d0825bca7fe65beaee391d30da42e937db621564Steve Block else: 155d0825bca7fe65beaee391d30da42e937db621564Steve Block if cls is None: 156d0825bca7fe65beaee391d30da42e937db621564Steve Block cls = JSONEncoder 157d0825bca7fe65beaee391d30da42e937db621564Steve Block iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii, 158d0825bca7fe65beaee391d30da42e937db621564Steve Block check_circular=check_circular, allow_nan=allow_nan, indent=indent, 159d0825bca7fe65beaee391d30da42e937db621564Steve Block separators=separators, encoding=encoding, **kw).iterencode(obj) 160d0825bca7fe65beaee391d30da42e937db621564Steve Block # could accelerate with writelines in some versions of Python, at 161d0825bca7fe65beaee391d30da42e937db621564Steve Block # a debuggability cost 162d0825bca7fe65beaee391d30da42e937db621564Steve Block for chunk in iterable: 163d0825bca7fe65beaee391d30da42e937db621564Steve Block fp.write(chunk) 164d0825bca7fe65beaee391d30da42e937db621564Steve Block 165d0825bca7fe65beaee391d30da42e937db621564Steve Block 166d0825bca7fe65beaee391d30da42e937db621564Steve Blockdef dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, 167d0825bca7fe65beaee391d30da42e937db621564Steve Block allow_nan=True, cls=None, indent=None, separators=None, 168d0825bca7fe65beaee391d30da42e937db621564Steve Block encoding='utf-8', **kw): 169d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 170d0825bca7fe65beaee391d30da42e937db621564Steve Block Serialize ``obj`` to a JSON formatted ``str``. 171d0825bca7fe65beaee391d30da42e937db621564Steve Block 172d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types 173d0825bca7fe65beaee391d30da42e937db621564Steve Block (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``) 174d0825bca7fe65beaee391d30da42e937db621564Steve Block will be skipped instead of raising a ``TypeError``. 175d0825bca7fe65beaee391d30da42e937db621564Steve Block 176d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``ensure_ascii`` is ``False``, then the return value will be a 177d0825bca7fe65beaee391d30da42e937db621564Steve Block ``unicode`` instance subject to normal Python ``str`` to ``unicode`` 178d0825bca7fe65beaee391d30da42e937db621564Steve Block coercion rules instead of being escaped to an ASCII ``str``. 179d0825bca7fe65beaee391d30da42e937db621564Steve Block 180d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``check_circular`` is ``False``, then the circular reference check 181d0825bca7fe65beaee391d30da42e937db621564Steve Block for container types will be skipped and a circular reference will 182d0825bca7fe65beaee391d30da42e937db621564Steve Block result in an ``OverflowError`` (or worse). 183d0825bca7fe65beaee391d30da42e937db621564Steve Block 184d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to 185d0825bca7fe65beaee391d30da42e937db621564Steve Block serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in 186d0825bca7fe65beaee391d30da42e937db621564Steve Block strict compliance of the JSON specification, instead of using the 187d0825bca7fe65beaee391d30da42e937db621564Steve Block JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). 188d0825bca7fe65beaee391d30da42e937db621564Steve Block 189d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``indent`` is a non-negative integer, then JSON array elements and 190d0825bca7fe65beaee391d30da42e937db621564Steve Block object members will be pretty-printed with that indent level. An indent 191d0825bca7fe65beaee391d30da42e937db621564Steve Block level of 0 will only insert newlines. ``None`` is the most compact 192d0825bca7fe65beaee391d30da42e937db621564Steve Block representation. 193d0825bca7fe65beaee391d30da42e937db621564Steve Block 194d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``separators`` is an ``(item_separator, dict_separator)`` tuple 195d0825bca7fe65beaee391d30da42e937db621564Steve Block then it will be used instead of the default ``(', ', ': ')`` separators. 196d0825bca7fe65beaee391d30da42e937db621564Steve Block ``(',', ':')`` is the most compact JSON representation. 197d0825bca7fe65beaee391d30da42e937db621564Steve Block 198d0825bca7fe65beaee391d30da42e937db621564Steve Block ``encoding`` is the character encoding for str instances, default is UTF-8. 199d0825bca7fe65beaee391d30da42e937db621564Steve Block 200d0825bca7fe65beaee391d30da42e937db621564Steve Block To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the 201d0825bca7fe65beaee391d30da42e937db621564Steve Block ``.default()`` method to serialize additional types), specify it with 202d0825bca7fe65beaee391d30da42e937db621564Steve Block the ``cls`` kwarg. 203d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 204d0825bca7fe65beaee391d30da42e937db621564Steve Block # cached encoder 205d0825bca7fe65beaee391d30da42e937db621564Steve Block if (skipkeys is False and ensure_ascii is True and 206d0825bca7fe65beaee391d30da42e937db621564Steve Block check_circular is True and allow_nan is True and 207d0825bca7fe65beaee391d30da42e937db621564Steve Block cls is None and indent is None and separators is None and 208d0825bca7fe65beaee391d30da42e937db621564Steve Block encoding == 'utf-8' and not kw): 209d0825bca7fe65beaee391d30da42e937db621564Steve Block return _default_encoder.encode(obj) 210d0825bca7fe65beaee391d30da42e937db621564Steve Block if cls is None: 211d0825bca7fe65beaee391d30da42e937db621564Steve Block cls = JSONEncoder 212d0825bca7fe65beaee391d30da42e937db621564Steve Block return cls( 213d0825bca7fe65beaee391d30da42e937db621564Steve Block skipkeys=skipkeys, ensure_ascii=ensure_ascii, 214d0825bca7fe65beaee391d30da42e937db621564Steve Block check_circular=check_circular, allow_nan=allow_nan, indent=indent, 215d0825bca7fe65beaee391d30da42e937db621564Steve Block separators=separators, encoding=encoding, 216d0825bca7fe65beaee391d30da42e937db621564Steve Block **kw).encode(obj) 217d0825bca7fe65beaee391d30da42e937db621564Steve Block 218d0825bca7fe65beaee391d30da42e937db621564Steve Block_default_decoder = JSONDecoder(encoding=None, object_hook=None) 219d0825bca7fe65beaee391d30da42e937db621564Steve Block 220d0825bca7fe65beaee391d30da42e937db621564Steve Blockdef load(fp, encoding=None, cls=None, object_hook=None, **kw): 221d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 222d0825bca7fe65beaee391d30da42e937db621564Steve Block Deserialize ``fp`` (a ``.read()``-supporting file-like object containing 223d0825bca7fe65beaee391d30da42e937db621564Steve Block a JSON document) to a Python object. 224d0825bca7fe65beaee391d30da42e937db621564Steve Block 225d0825bca7fe65beaee391d30da42e937db621564Steve Block If the contents of ``fp`` is encoded with an ASCII based encoding other 226d0825bca7fe65beaee391d30da42e937db621564Steve Block than utf-8 (e.g. latin-1), then an appropriate ``encoding`` name must 227d0825bca7fe65beaee391d30da42e937db621564Steve Block be specified. Encodings that are not ASCII based (such as UCS-2) are 228d0825bca7fe65beaee391d30da42e937db621564Steve Block not allowed, and should be wrapped with 229d0825bca7fe65beaee391d30da42e937db621564Steve Block ``codecs.getreader(fp)(encoding)``, or simply decoded to a ``unicode`` 230d0825bca7fe65beaee391d30da42e937db621564Steve Block object and passed to ``loads()`` 231d0825bca7fe65beaee391d30da42e937db621564Steve Block 232d0825bca7fe65beaee391d30da42e937db621564Steve Block ``object_hook`` is an optional function that will be called with the 233d0825bca7fe65beaee391d30da42e937db621564Steve Block result of any object literal decode (a ``dict``). The return value of 234d0825bca7fe65beaee391d30da42e937db621564Steve Block ``object_hook`` will be used instead of the ``dict``. This feature 235d0825bca7fe65beaee391d30da42e937db621564Steve Block can be used to implement custom decoders (e.g. JSON-RPC class hinting). 236d0825bca7fe65beaee391d30da42e937db621564Steve Block 237d0825bca7fe65beaee391d30da42e937db621564Steve Block To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` 238d0825bca7fe65beaee391d30da42e937db621564Steve Block kwarg. 239d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 240d0825bca7fe65beaee391d30da42e937db621564Steve Block return loads(fp.read(), 241d0825bca7fe65beaee391d30da42e937db621564Steve Block encoding=encoding, cls=cls, object_hook=object_hook, **kw) 242d0825bca7fe65beaee391d30da42e937db621564Steve Block 243d0825bca7fe65beaee391d30da42e937db621564Steve Blockdef loads(s, encoding=None, cls=None, object_hook=None, **kw): 244d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 245d0825bca7fe65beaee391d30da42e937db621564Steve Block Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON 246d0825bca7fe65beaee391d30da42e937db621564Steve Block document) to a Python object. 247d0825bca7fe65beaee391d30da42e937db621564Steve Block 248d0825bca7fe65beaee391d30da42e937db621564Steve Block If ``s`` is a ``str`` instance and is encoded with an ASCII based encoding 249d0825bca7fe65beaee391d30da42e937db621564Steve Block other than utf-8 (e.g. latin-1) then an appropriate ``encoding`` name 250d0825bca7fe65beaee391d30da42e937db621564Steve Block must be specified. Encodings that are not ASCII based (such as UCS-2) 251d0825bca7fe65beaee391d30da42e937db621564Steve Block are not allowed and should be decoded to ``unicode`` first. 252d0825bca7fe65beaee391d30da42e937db621564Steve Block 253d0825bca7fe65beaee391d30da42e937db621564Steve Block ``object_hook`` is an optional function that will be called with the 254d0825bca7fe65beaee391d30da42e937db621564Steve Block result of any object literal decode (a ``dict``). The return value of 255d0825bca7fe65beaee391d30da42e937db621564Steve Block ``object_hook`` will be used instead of the ``dict``. This feature 256d0825bca7fe65beaee391d30da42e937db621564Steve Block can be used to implement custom decoders (e.g. JSON-RPC class hinting). 257d0825bca7fe65beaee391d30da42e937db621564Steve Block 258d0825bca7fe65beaee391d30da42e937db621564Steve Block To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` 259d0825bca7fe65beaee391d30da42e937db621564Steve Block kwarg. 260d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 261d0825bca7fe65beaee391d30da42e937db621564Steve Block if cls is None and encoding is None and object_hook is None and not kw: 262d0825bca7fe65beaee391d30da42e937db621564Steve Block return _default_decoder.decode(s) 263d0825bca7fe65beaee391d30da42e937db621564Steve Block if cls is None: 264d0825bca7fe65beaee391d30da42e937db621564Steve Block cls = JSONDecoder 265d0825bca7fe65beaee391d30da42e937db621564Steve Block if object_hook is not None: 266d0825bca7fe65beaee391d30da42e937db621564Steve Block kw['object_hook'] = object_hook 267d0825bca7fe65beaee391d30da42e937db621564Steve Block return cls(encoding=encoding, **kw).decode(s) 268d0825bca7fe65beaee391d30da42e937db621564Steve Block 269d0825bca7fe65beaee391d30da42e937db621564Steve Blockdef read(s): 270d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 271d0825bca7fe65beaee391d30da42e937db621564Steve Block json-py API compatibility hook. Use loads(s) instead. 272d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 273d0825bca7fe65beaee391d30da42e937db621564Steve Block import warnings 274d0825bca7fe65beaee391d30da42e937db621564Steve Block warnings.warn("simplejson.loads(s) should be used instead of read(s)", 275d0825bca7fe65beaee391d30da42e937db621564Steve Block DeprecationWarning) 276d0825bca7fe65beaee391d30da42e937db621564Steve Block return loads(s) 277d0825bca7fe65beaee391d30da42e937db621564Steve Block 278d0825bca7fe65beaee391d30da42e937db621564Steve Blockdef write(obj): 279d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 280d0825bca7fe65beaee391d30da42e937db621564Steve Block json-py API compatibility hook. Use dumps(s) instead. 281d0825bca7fe65beaee391d30da42e937db621564Steve Block """ 282d0825bca7fe65beaee391d30da42e937db621564Steve Block import warnings 283d0825bca7fe65beaee391d30da42e937db621564Steve Block warnings.warn("simplejson.dumps(s) should be used instead of write(s)", 284d0825bca7fe65beaee391d30da42e937db621564Steve Block DeprecationWarning) 285d0825bca7fe65beaee391d30da42e937db621564Steve Block return dumps(obj) 286d0825bca7fe65beaee391d30da42e937db621564Steve Block 287d0825bca7fe65beaee391d30da42e937db621564Steve Block 288