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