14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmr"""JSON (JavaScript Object Notation) <http://json.org> is a subset of 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmJavaScript syntax (ECMA-262 3rd edition) used as a lightweight data 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylminterchange format. 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm:mod:`json` exposes an API familiar to users of the standard library 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm:mod:`marshal` and :mod:`pickle` modules. It is the externally maintained 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmversion of the :mod:`json` library contained in Python 2.6, but maintains 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmcompatibility with Python 2.4 and Python 2.5 and (currently) has 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmsignificant performance advantages, even without using the optional C 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmextension for speedups. 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmEncoding basic Python object hierarchies:: 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> import json 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '["foo", {"bar": ["baz", null, 1.0, 2]}]' 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> print json.dumps("\"foo\bar") 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "\"foo\bar" 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> print json.dumps(u'\u1234') 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "\u1234" 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> print json.dumps('\\') 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "\\" 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True) 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {"a": 0, "b": 0, "c": 0} 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> from StringIO import StringIO 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> io = StringIO() 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.dump(['streaming API'], io) 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> io.getvalue() 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '["streaming API"]' 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmCompact encoding:: 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> import json 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':')) 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '[1,2,3,{"4":5,"6":7}]' 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPretty printing:: 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> import json 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4) 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> print '\n'.join([l.rstrip() for l in s.splitlines()]) 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm { 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "4": 5, 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "6": 7 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm } 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmDecoding JSON:: 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> import json 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}] 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm True 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar' 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm True 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> from StringIO import StringIO 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> io = StringIO('["streaming API"]') 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.load(io)[0] == 'streaming API' 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm True 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmSpecializing JSON object decoding:: 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> import json 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> def as_complex(dct): 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ... if '__complex__' in dct: 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ... return complex(dct['real'], dct['imag']) 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ... return dct 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ... 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ... object_hook=as_complex) 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (1+2j) 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> from decimal import Decimal 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.loads('1.1', parse_float=Decimal) == Decimal('1.1') 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm True 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmSpecializing JSON object encoding:: 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> import json 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> def encode_complex(obj): 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ... if isinstance(obj, complex): 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ... return [obj.real, obj.imag] 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ... raise TypeError(repr(o) + " is not JSON serializable") 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ... 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.dumps(2 + 1j, default=encode_complex) 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '[2.0, 1.0]' 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j) 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '[2.0, 1.0]' 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j)) 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '[2.0, 1.0]' 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmUsing json.tool from the shell to validate and pretty-print:: 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm $ echo '{"json":"obj"}' | python -m json.tool 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm { 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "json": "obj" 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm } 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm $ echo '{ 1.2:3.4}' | python -m json.tool 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Expecting property name: line 1 column 2 (char 2) 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm""" 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm__version__ = '2.0.9' 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm__all__ = [ 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'dump', 'dumps', 'load', 'loads', 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'JSONDecoder', 'JSONEncoder', 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm] 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm__author__ = 'Bob Ippolito <bob@redivi.com>' 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom .decoder import JSONDecoder 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom .encoder import JSONEncoder 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_default_encoder = JSONEncoder( 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm skipkeys=False, 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ensure_ascii=True, 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_circular=True, 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm allow_nan=True, 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm indent=None, 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm separators=None, 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm encoding='utf-8', 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm default=None, 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm) 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm allow_nan=True, cls=None, indent=None, separators=None, 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm encoding='utf-8', default=None, **kw): 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``.write()``-supporting file-like object). 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``skipkeys`` is true then ``dict`` keys that are not basic types 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``) 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm will be skipped instead of raising a ``TypeError``. 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``ensure_ascii`` is false, then the some chunks written to ``fp`` 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm may be ``unicode`` instances, subject to normal Python ``str`` to 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``unicode`` coercion rules. Unless ``fp.write()`` explicitly 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm understands ``unicode`` (as in ``codecs.getwriter()``) this is likely 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm to cause an error. 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``check_circular`` is false, then the circular reference check 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for container types will be skipped and a circular reference will 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result in an ``OverflowError`` (or worse). 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``allow_nan`` is false, then it will be a ``ValueError`` to 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm in strict compliance of the JSON specification, instead of using the 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``indent`` is a non-negative integer, then JSON array elements and 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm object members will be pretty-printed with that indent level. An indent 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm level of 0 will only insert newlines. ``None`` is the most compact 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm representation. 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``separators`` is an ``(item_separator, dict_separator)`` tuple 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm then it will be used instead of the default ``(', ', ': ')`` separators. 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``(',', ':')`` is the most compact JSON representation. 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``encoding`` is the character encoding for str instances, default is UTF-8. 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``default(obj)`` is a function that should return a serializable version 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm of obj or raise TypeError. The default simply raises TypeError. 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``.default()`` method to serialize additional types), specify it with 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm the ``cls`` kwarg; otherwise ``JSONEncoder`` is used. 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # cached encoder 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if (not skipkeys and ensure_ascii and 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_circular and allow_nan and 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls is None and indent is None and separators is None and 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm encoding == 'utf-8' and default is None and not kw): 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm iterable = _default_encoder.iterencode(obj) 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if cls is None: 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls = JSONEncoder 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii, 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_circular=check_circular, allow_nan=allow_nan, indent=indent, 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm separators=separators, encoding=encoding, 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm default=default, **kw).iterencode(obj) 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # could accelerate with writelines in some versions of Python, at 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # a debuggability cost 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for chunk in iterable: 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm fp.write(chunk) 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm allow_nan=True, cls=None, indent=None, separators=None, 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm encoding='utf-8', default=None, **kw): 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Serialize ``obj`` to a JSON formatted ``str``. 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``skipkeys`` is false then ``dict`` keys that are not basic types 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``) 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm will be skipped instead of raising a ``TypeError``. 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``ensure_ascii`` is false, then the return value will be a 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``unicode`` instance subject to normal Python ``str`` to ``unicode`` 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm coercion rules instead of being escaped to an ASCII ``str``. 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``check_circular`` is false, then the circular reference check 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for container types will be skipped and a circular reference will 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result in an ``OverflowError`` (or worse). 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``allow_nan`` is false, then it will be a ``ValueError`` to 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm strict compliance of the JSON specification, instead of using the 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``indent`` is a non-negative integer, then JSON array elements and 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm object members will be pretty-printed with that indent level. An indent 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm level of 0 will only insert newlines. ``None`` is the most compact 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm representation. 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``separators`` is an ``(item_separator, dict_separator)`` tuple 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm then it will be used instead of the default ``(', ', ': ')`` separators. 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``(',', ':')`` is the most compact JSON representation. 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``encoding`` is the character encoding for str instances, default is UTF-8. 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``default(obj)`` is a function that should return a serializable version 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm of obj or raise TypeError. The default simply raises TypeError. 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``.default()`` method to serialize additional types), specify it with 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm the ``cls`` kwarg; otherwise ``JSONEncoder`` is used. 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # cached encoder 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if (not skipkeys and ensure_ascii and 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_circular and allow_nan and 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls is None and indent is None and separators is None and 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm encoding == 'utf-8' and default is None and not kw): 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _default_encoder.encode(obj) 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if cls is None: 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls = JSONEncoder 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return cls( 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm skipkeys=skipkeys, ensure_ascii=ensure_ascii, 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check_circular=check_circular, allow_nan=allow_nan, indent=indent, 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm separators=separators, encoding=encoding, default=default, 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm **kw).encode(obj) 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_default_decoder = JSONDecoder(encoding=None, object_hook=None, 2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm object_pairs_hook=None) 2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef load(fp, encoding=None, cls=None, object_hook=None, parse_float=None, 2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_int=None, parse_constant=None, object_pairs_hook=None, **kw): 2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing 2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a JSON document) to a Python object. 2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If the contents of ``fp`` is encoded with an ASCII based encoding other 2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm than utf-8 (e.g. latin-1), then an appropriate ``encoding`` name must 2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm be specified. Encodings that are not ASCII based (such as UCS-2) are 2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm not allowed, and should be wrapped with 2544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``codecs.getreader(fp)(encoding)``, or simply decoded to a ``unicode`` 2554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm object and passed to ``loads()`` 2564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``object_hook`` is an optional function that will be called with the 2584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result of any object literal decode (a ``dict``). The return value of 2594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``object_hook`` will be used instead of the ``dict``. This feature 2604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm can be used to implement custom decoders (e.g. JSON-RPC class hinting). 2614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``object_pairs_hook`` is an optional function that will be called with the 2634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result of any object literal decoded with an ordered list of pairs. The 2644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return value of ``object_pairs_hook`` will be used instead of the ``dict``. 2654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm This feature can be used to implement custom decoders that rely on the 2664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm order that the key and value pairs are decoded (for example, 2674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm collections.OrderedDict will remember the order of insertion). If 2684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``object_hook`` is also defined, the ``object_pairs_hook`` takes priority. 2694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` 2714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm kwarg; otherwise ``JSONDecoder`` is used. 2724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return loads(fp.read(), 2754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm encoding=encoding, cls=cls, object_hook=object_hook, 2764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_float=parse_float, parse_int=parse_int, 2774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, 2784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm **kw) 2794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, 2824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_int=None, parse_constant=None, object_pairs_hook=None, **kw): 2834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON 2844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm document) to a Python object. 2854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm If ``s`` is a ``str`` instance and is encoded with an ASCII based encoding 2874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm other than utf-8 (e.g. latin-1) then an appropriate ``encoding`` name 2884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm must be specified. Encodings that are not ASCII based (such as UCS-2) 2894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm are not allowed and should be decoded to ``unicode`` first. 2904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``object_hook`` is an optional function that will be called with the 2924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result of any object literal decode (a ``dict``). The return value of 2934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``object_hook`` will be used instead of the ``dict``. This feature 2944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm can be used to implement custom decoders (e.g. JSON-RPC class hinting). 2954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``object_pairs_hook`` is an optional function that will be called with the 2974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result of any object literal decoded with an ordered list of pairs. The 2984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return value of ``object_pairs_hook`` will be used instead of the ``dict``. 2994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm This feature can be used to implement custom decoders that rely on the 3004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm order that the key and value pairs are decoded (for example, 3014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm collections.OrderedDict will remember the order of insertion). If 3024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``object_hook`` is also defined, the ``object_pairs_hook`` takes priority. 3034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``parse_float``, if specified, will be called with the string 3054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm of every JSON float to be decoded. By default this is equivalent to 3064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm float(num_str). This can be used to use another datatype or parser 3074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for JSON floats (e.g. decimal.Decimal). 3084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``parse_int``, if specified, will be called with the string 3104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm of every JSON int to be decoded. By default this is equivalent to 3114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm int(num_str). This can be used to use another datatype or parser 3124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for JSON integers (e.g. float). 3134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ``parse_constant``, if specified, will be called with one of the 3154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm following strings: -Infinity, Infinity, NaN, null, true, false. 3164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm This can be used to raise an exception if invalid JSON numbers 3174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm are encountered. 3184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` 3204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm kwarg; otherwise ``JSONDecoder`` is used. 3214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 3234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if (cls is None and encoding is None and object_hook is None and 3244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_int is None and parse_float is None and 3254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm parse_constant is None and object_pairs_hook is None and not kw): 3264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _default_decoder.decode(s) 3274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if cls is None: 3284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cls = JSONDecoder 3294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if object_hook is not None: 3304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm kw['object_hook'] = object_hook 3314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if object_pairs_hook is not None: 3324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm kw['object_pairs_hook'] = object_pairs_hook 3334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if parse_float is not None: 3344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm kw['parse_float'] = parse_float 3354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if parse_int is not None: 3364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm kw['parse_int'] = parse_int 3374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if parse_constant is not None: 3384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm kw['parse_constant'] = parse_constant 3394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return cls(encoding=encoding, **kw).decode(s) 340