;
"Ic               @   s  d  Z  d Z d d d d d d g Z d Z d	 d
 l m Z d	 d l m Z e d d d d d d d d d d d d d d d d  Z d d d d d d d d d d 	 Z d d d d d d d d d d 	 Z e d d d d  Z d d d d d d d  Z d d d d d d d  Z d S(   u  A simple, fast, extensible JSON encoder and decoder

JSON (JavaScript Object Notation) <http://json.org> is a subset of
JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
interchange format.

json exposes an API familiar to uses of the standard library
marshal and pickle modules.

Encoding basic Python object hierarchies::

    >>> import json
    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    >>> print(json.dumps("\"foo\bar"))
    "\"foo\bar"
    >>> print(json.dumps('\u1234'))
    "\u1234"
    >>> print(json.dumps('\\'))
    "\\"
    >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
    {"a": 0, "b": 0, "c": 0}
    >>> from io import StringIO
    >>> io = StringIO()
    >>> json.dump(['streaming API'], io)
    >>> io.getvalue()
    '["streaming API"]'

Compact encoding::

    >>> import json
    >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
    '[1,2,3,{"4":5,"6":7}]'

Pretty printing (using repr() because of extraneous whitespace in the output)::

    >>> import json
    >>> print(repr(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)))
    '{\n    "4": 5, \n    "6": 7\n}'

Decoding JSON::

    >>> import json
    >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
    ['foo', {'bar': ['baz', None, 1.0, 2]}]
    >>> json.loads('"\\"foo\\bar"')
    '"foo\x08ar'
    >>> from io import StringIO
    >>> io = StringIO('["streaming API"]')
    >>> json.load(io)
    ['streaming API']

Specializing JSON object decoding::

    >>> import json
    >>> def as_complex(dct):
    ...     if '__complex__' in dct:
    ...         return complex(dct['real'], dct['imag'])
    ...     return dct
    ...
    >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
    ...     object_hook=as_complex)
    (1+2j)
    >>> import decimal
    >>> json.loads('1.1', parse_float=decimal.Decimal)
    Decimal('1.1')

Extending JSONEncoder::

    >>> import json
    >>> class ComplexEncoder(json.JSONEncoder):
    ...     def default(self, obj):
    ...         if isinstance(obj, complex):
    ...             return [obj.real, obj.imag]
    ...         return json.JSONEncoder.default(self, obj)
    ...
    >>> dumps(2 + 1j, cls=ComplexEncoder)
    '[2.0, 1.0]'
    >>> ComplexEncoder().encode(2 + 1j)
    '[2.0, 1.0]'
    >>> list(ComplexEncoder().iterencode(2 + 1j))
    ['[', '2.0', ', ', '1.0', ']']


Using json.tool from the shell to validate and
pretty-print::

    $ echo '{"json":"obj"}' | python -mjson.tool
    {
        "json": "obj"
    }
    $ echo '{ 1.2:3.4}' | python -mjson.tool
    Expecting property name: line 1 column 2 (char 2)

Note that the JSON produced by this module's default settings
is a subset of YAML, so it may be used as a serializer for that as well.

u   1.9u   dumpu   dumpsu   loadu   loadsu   JSONDecoderu   JSONEncoderu   Bob Ippolito <bob@redivi.com>i   (   u   JSONDecoder(   u   JSONEncoderu   skipkeysu   ensure_asciiu   check_circularu	   allow_nanu   indentu
   separatorsu   encodingu   utf-8u   defaultc             K   s  | d k o | d k ov | d k oi | d k o\ | d
 k oO | d
 k oB | d
 k o5 |	 d k o( |
 d
 k o | o t j |   } n] | d
 k o
 t } n | d | d | d | d | d | d | d |	 d	 |
 |  j |   } x | D] } | j |  q Wd
 S(   u  Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
    ``.write()``-supporting file-like object).

    If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types
    (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
    will be skipped instead of raising a ``TypeError``.

    If ``ensure_ascii`` is ``False``, then the some chunks written to ``fp``
    may be ``unicode`` instances, subject to normal Python ``str`` to
    ``unicode`` coercion rules. Unless ``fp.write()`` explicitly
    understands ``unicode`` (as in ``codecs.getwriter()``) this is likely
    to cause an error.

    If ``check_circular`` is ``False``, then the circular reference check
    for container types will be skipped and a circular reference will
    result in an ``OverflowError`` (or worse).

    If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to
    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
    in strict compliance of the JSON specification, instead of using the
    JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).

    If ``indent`` is a non-negative integer, then JSON array elements and object
    members will be pretty-printed with that indent level. An indent level
    of 0 will only insert newlines. ``None`` is the most compact representation.

    If ``separators`` is an ``(item_separator, dict_separator)`` tuple
    then it will be used instead of the default ``(', ', ': ')`` separators.
    ``(',', ':')`` is the most compact JSON representation.

    ``encoding`` is the character encoding for str instances, default is UTF-8.

    ``default(obj)`` is a function that should return a serializable version
    of obj or raise TypeError. The default simply raises TypeError.

    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
    ``.default()`` method to serialize additional types), specify it with
    the ``cls`` kwarg.

    u   utf-8u   skipkeysu   ensure_asciiu   check_circularu	   allow_nanu   indentu
   separatorsu   encodingu   defaultNFT(   u   Falseu   Trueu   Noneu   _default_encoderu
   iterencodeu   JSONEncoderu   write(   u   obju   fpu   skipkeysu   ensure_asciiu   check_circularu	   allow_nanu   clsu   indentu
   separatorsu   encodingu   defaultu   kwu   iterableu   chunk(    (    u*   /mit/python/lib/python3.0/json/__init__.pyu   dumpz   s    ,'"
 c
             K   s   | d
 k o~ | d k oq | d k od | d k oW | d k oJ | d k o= | d k o0 | d k o# |	 d k o |
 o t j |   S| d k o
 t } n | d | d | d | d | d | d | d | d	 |	 |
  j |   S(   u  Serialize ``obj`` to a JSON formatted ``str``.

    If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types
    (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
    will be skipped instead of raising a ``TypeError``.

    If ``ensure_ascii`` is ``False``, then the return value will be a
    ``unicode`` instance subject to normal Python ``str`` to ``unicode``
    coercion rules instead of being escaped to an ASCII ``str``.

    If ``check_circular`` is ``False``, then the circular reference check
    for container types will be skipped and a circular reference will
    result in an ``OverflowError`` (or worse).

    If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to
    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
    strict compliance of the JSON specification, instead of using the
    JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).

    If ``indent`` is a non-negative integer, then JSON array elements and
    object members will be pretty-printed with that indent level. An indent
    level of 0 will only insert newlines. ``None`` is the most compact
    representation.

    If ``separators`` is an ``(item_separator, dict_separator)`` tuple
    then it will be used instead of the default ``(', ', ': ')`` separators.
    ``(',', ':')`` is the most compact JSON representation.

    ``encoding`` is the character encoding for str instances, default is UTF-8.

    ``default(obj)`` is a function that should return a serializable version
    of obj or raise TypeError. The default simply raises TypeError.

    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
    ``.default()`` method to serialize additional types), specify it with
    the ``cls`` kwarg.

    u   utf-8u   skipkeysu   ensure_asciiu   check_circularu	   allow_nanu   indentu
   separatorsu   encodingu   defaultFTN(   u   Falseu   Trueu   Noneu   _default_encoderu   encodeu   JSONEncoder(   u   obju   skipkeysu   ensure_asciiu   check_circularu	   allow_nanu   clsu   indentu
   separatorsu   encodingu   defaultu   kw(    (    u*   /mit/python/lib/python3.0/json/__init__.pyu   dumps   s    *'"
u   object_hookc             K   s7   t  |  j   d | d | d | d | d | d | | S(   up  Deserialize ``fp`` (a ``.read()``-supporting file-like object
    containing a JSON document) to a Python object.

    If the contents of ``fp`` is encoded with an ASCII based encoding other
    than utf-8 (e.g. latin-1), then an appropriate ``encoding`` name must
    be specified. Encodings that are not ASCII based (such as UCS-2) are
    not allowed, and should be wrapped with
    ``codecs.getreader(fp)(encoding)``, or simply decoded to a ``unicode``
    object and passed to ``loads()``

    ``object_hook`` is an optional function that will be called with the
    result of any object literal decode (a ``dict``). The return value of
    ``object_hook`` will be used instead of the ``dict``. This feature
    can be used to implement custom decoders (e.g. JSON-RPC class hinting).

    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
    kwarg.

    u   encodingu   clsu   object_hooku   parse_floatu	   parse_intu   parse_constant(   u   loadsu   read(   u   fpu   encodingu   clsu   object_hooku   parse_floatu	   parse_intu   parse_constantu   kw(    (    u*   /mit/python/lib/python3.0/json/__init__.pyu   load   s    c             K   s   | d k oW | d k oJ | d k o= | d k o0 | d k o# | d k o | o t j |   S| d k o
 t } n | d k	 o | | d <n | d k	 o | | d <n | d k	 o | | d <n | d k	 o | | d <n | d | |  j |   S(   u  Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
    document) to a Python object.

    If ``s`` is a ``str`` instance and is encoded with an ASCII based encoding
    other than utf-8 (e.g. latin-1) then an appropriate ``encoding`` name
    must be specified. Encodings that are not ASCII based (such as UCS-2)
    are not allowed and should be decoded to ``unicode`` first.

    ``object_hook`` is an optional function that will be called with the
    result of any object literal decode (a ``dict``). The return value of
    ``object_hook`` will be used instead of the ``dict``. This feature
    can be used to implement custom decoders (e.g. JSON-RPC class hinting).

    ``parse_float``, if specified, will be called with the string
    of every JSON float to be decoded. By default this is equivalent to
    float(num_str). This can be used to use another datatype or parser
    for JSON floats (e.g. decimal.Decimal).

    ``parse_int``, if specified, will be called with the string
    of every JSON int to be decoded. By default this is equivalent to
    int(num_str). This can be used to use another datatype or parser
    for JSON integers (e.g. float).

    ``parse_constant``, if specified, will be called with one of the
    following strings: -Infinity, Infinity, NaN, null, true, false.
    This can be used to raise an exception if invalid JSON numbers
    are encountered.

    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
    kwarg.

    u   object_hooku   parse_floatu	   parse_intu   parse_constantu   encodingN(   u   Noneu   _default_decoderu   decodeu   JSONDecoder(   u   su   encodingu   clsu   object_hooku   parse_floatu	   parse_intu   parse_constantu   kw(    (    u*   /mit/python/lib/python3.0/json/__init__.pyu   loads  s    "'
NFT(   u   __doc__u   __version__u   __all__u
   __author__u   decoderu   JSONDecoderu   encoderu   JSONEncoderu   Falseu   Trueu   Noneu   _default_encoderu   dumpu   dumpsu   _default_decoderu   loadu   loads(    (    (    u*   /mit/python/lib/python3.0/json/__init__.pyu   <module>b   s4   		<	6