Home | History | Annotate | Download | only in library
      1 :mod:`json` --- JSON encoder and decoder
      2 ========================================
      3 
      4 .. module:: json
      5    :synopsis: Encode and decode the JSON format.
      6 .. moduleauthor:: Bob Ippolito <bob (a] redivi.com>
      7 .. sectionauthor:: Bob Ippolito <bob (a] redivi.com>
      8 .. versionadded:: 2.6
      9 
     10 `JSON (JavaScript Object Notation) <http://json.org>`_, specified by
     11 :rfc:`7159` (which obsoletes :rfc:`4627`) and by
     12 `ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_,
     13 is a lightweight data interchange format inspired by
     14 `JavaScript <https://en.wikipedia.org/wiki/JavaScript>`_ object literal syntax
     15 (although it is not a strict subset of JavaScript [#rfc-errata]_ ).
     16 
     17 :mod:`json` exposes an API familiar to users of the standard library
     18 :mod:`marshal` and :mod:`pickle` modules.
     19 
     20 Encoding basic Python object hierarchies::
     21 
     22     >>> import json
     23     >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
     24     '["foo", {"bar": ["baz", null, 1.0, 2]}]'
     25     >>> print json.dumps("\"foo\bar")
     26     "\"foo\bar"
     27     >>> print json.dumps(u'\u1234')
     28     "\u1234"
     29     >>> print json.dumps('\\')
     30     "\\"
     31     >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
     32     {"a": 0, "b": 0, "c": 0}
     33     >>> from StringIO import StringIO
     34     >>> io = StringIO()
     35     >>> json.dump(['streaming API'], io)
     36     >>> io.getvalue()
     37     '["streaming API"]'
     38 
     39 Compact encoding::
     40 
     41     >>> import json
     42     >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
     43     '[1,2,3,{"4":5,"6":7}]'
     44 
     45 Pretty printing::
     46 
     47     >>> import json
     48     >>> print json.dumps({'4': 5, '6': 7}, sort_keys=True,
     49     ...                  indent=4, separators=(',', ': '))
     50     {
     51         "4": 5,
     52         "6": 7
     53     }
     54 
     55 Decoding JSON::
     56 
     57     >>> import json
     58     >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
     59     [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
     60     >>> json.loads('"\\"foo\\bar"')
     61     u'"foo\x08ar'
     62     >>> from StringIO import StringIO
     63     >>> io = StringIO('["streaming API"]')
     64     >>> json.load(io)
     65     [u'streaming API']
     66 
     67 Specializing JSON object decoding::
     68 
     69     >>> import json
     70     >>> def as_complex(dct):
     71     ...     if '__complex__' in dct:
     72     ...         return complex(dct['real'], dct['imag'])
     73     ...     return dct
     74     ...
     75     >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
     76     ...     object_hook=as_complex)
     77     (1+2j)
     78     >>> import decimal
     79     >>> json.loads('1.1', parse_float=decimal.Decimal)
     80     Decimal('1.1')
     81 
     82 Extending :class:`JSONEncoder`::
     83 
     84     >>> import json
     85     >>> class ComplexEncoder(json.JSONEncoder):
     86     ...     def default(self, obj):
     87     ...         if isinstance(obj, complex):
     88     ...             return [obj.real, obj.imag]
     89     ...         # Let the base class default method raise the TypeError
     90     ...         return json.JSONEncoder.default(self, obj)
     91     ...
     92     >>> dumps(2 + 1j, cls=ComplexEncoder)
     93     '[2.0, 1.0]'
     94     >>> ComplexEncoder().encode(2 + 1j)
     95     '[2.0, 1.0]'
     96     >>> list(ComplexEncoder().iterencode(2 + 1j))
     97     ['[', '2.0', ', ', '1.0', ']']
     98 
     99 
    100 .. highlight:: none
    101 
    102 Using :mod:`json.tool` from the shell to validate and pretty-print::
    103 
    104     $ echo '{"json":"obj"}' | python -m json.tool
    105     {
    106         "json": "obj"
    107     }
    108     $ echo '{1.2:3.4}' | python -mjson.tool
    109     Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
    110 
    111 .. highlight:: python
    112 
    113 .. note::
    114 
    115    JSON is a subset of `YAML <http://yaml.org/>`_ 1.2.  The JSON produced by
    116    this module's default settings (in particular, the default *separators*
    117    value) is also a subset of YAML 1.0 and 1.1.  This module can thus also be
    118    used as a YAML serializer.
    119 
    120 
    121 Basic Usage
    122 -----------
    123 
    124 .. function:: dump(obj, fp, skipkeys=False, ensure_ascii=True, \
    125                    check_circular=True, allow_nan=True, cls=None, \
    126                    indent=None, separators=None, encoding="utf-8", \
    127                    default=None, sort_keys=False, **kw)
    128 
    129    Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting
    130    :term:`file-like object`) using this :ref:`conversion table
    131    <py-to-json-table>`.
    132 
    133    If *skipkeys* is true (default: ``False``), then dict keys that are not
    134    of a basic type (:class:`str`, :class:`unicode`, :class:`int`, :class:`long`,
    135    :class:`float`, :class:`bool`, ``None``) will be skipped instead of raising a
    136    :exc:`TypeError`.
    137 
    138    If *ensure_ascii* is true (the default), all non-ASCII characters in the
    139    output are escaped with ``\uXXXX`` sequences, and the result is a
    140    :class:`str` instance consisting of ASCII characters only.  If
    141    *ensure_ascii* is false, some chunks written to *fp* may be
    142    :class:`unicode` instances.  This usually happens because the input contains
    143    unicode strings or the *encoding* parameter is used.  Unless ``fp.write()``
    144    explicitly understands :class:`unicode` (as in :func:`codecs.getwriter`)
    145    this is likely to cause an error.
    146 
    147    If *check_circular* is false (default: ``True``), then the circular
    148    reference check for container types will be skipped and a circular reference
    149    will result in an :exc:`OverflowError` (or worse).
    150 
    151    If *allow_nan* is false (default: ``True``), then it will be a
    152    :exc:`ValueError` to serialize out of range :class:`float` values (``nan``,
    153    ``inf``, ``-inf``) in strict compliance of the JSON specification.
    154    If *allow_nan* is true, their JavaScript equivalents (``NaN``,
    155    ``Infinity``, ``-Infinity``) will be used.
    156 
    157    If *indent* is a non-negative integer, then JSON array elements and object
    158    members will be pretty-printed with that indent level.  An indent level of 0,
    159    or negative, will only insert newlines.  ``None`` (the default) selects the
    160    most compact representation.
    161 
    162    .. note::
    163 
    164       Since the default item separator is ``', '``,  the output might include
    165       trailing whitespace when *indent* is specified.  You can use
    166       ``separators=(',', ': ')`` to avoid this.
    167 
    168    If specified, *separators* should be an ``(item_separator, key_separator)``
    169    tuple.  By default, ``(', ', ': ')`` are used.  To get the most compact JSON
    170    representation, you should specify ``(',', ':')`` to eliminate whitespace.
    171 
    172    *encoding* is the character encoding for str instances, default is UTF-8.
    173 
    174    If specified, *default* should be a function that gets called for objects that
    175    can't otherwise be serialized.  It should return a JSON encodable version of
    176    the object or raise a :exc:`TypeError`.  If not specified, :exc:`TypeError`
    177    is raised.
    178 
    179    If *sort_keys* is true (default: ``False``), then the output of
    180    dictionaries will be sorted by key.
    181 
    182    To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
    183    :meth:`default` method to serialize additional types), specify it with the
    184    *cls* kwarg; otherwise :class:`JSONEncoder` is used.
    185 
    186    .. note::
    187 
    188       Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol so
    189       trying to serialize more objects with repeated calls to :func:`dump` and
    190       the same *fp* will result in an invalid JSON file.
    191 
    192 .. function:: dumps(obj, skipkeys=False, ensure_ascii=True, \
    193                     check_circular=True, allow_nan=True, cls=None, \
    194                     indent=None, separators=None, encoding="utf-8", \
    195                     default=None, sort_keys=False, **kw)
    196 
    197    Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion
    198    table <py-to-json-table>`.  If *ensure_ascii* is false, the result may
    199    contain non-ASCII characters and the return value may be a :class:`unicode`
    200    instance.
    201 
    202    The arguments have the same meaning as in :func:`dump`.
    203 
    204    .. note::
    205 
    206       Keys in key/value pairs of JSON are always of the type :class:`str`. When
    207       a dictionary is converted into JSON, all the keys of the dictionary are
    208       coerced to strings. As a result of this, if a dictionary is converted
    209       into JSON and then back into a dictionary, the dictionary may not equal
    210       the original one. That is, ``loads(dumps(x)) != x`` if x has non-string
    211       keys.
    212 
    213 .. function:: load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
    214 
    215    Deserialize *fp* (a ``.read()``-supporting :term:`file-like object`
    216    containing a JSON document) to a Python object using this :ref:`conversion
    217    table <json-to-py-table>`.
    218 
    219    If the contents of *fp* are encoded with an ASCII based encoding other than
    220    UTF-8 (e.g. latin-1), then an appropriate *encoding* name must be specified.
    221    Encodings that are not ASCII based (such as UCS-2) are not allowed, and
    222    should be wrapped with ``codecs.getreader(encoding)(fp)``, or simply decoded
    223    to a :class:`unicode` object and passed to :func:`loads`.
    224 
    225    *object_hook* is an optional function that will be called with the result of
    226    any object literal decoded (a :class:`dict`).  The return value of
    227    *object_hook* will be used instead of the :class:`dict`.  This feature can be used
    228    to implement custom decoders (e.g. `JSON-RPC <http://www.jsonrpc.org>`_
    229    class hinting).
    230 
    231    *object_pairs_hook* is an optional function that will be called with the
    232    result of any object literal decoded with an ordered list of pairs.  The
    233    return value of *object_pairs_hook* will be used instead of the
    234    :class:`dict`.  This feature can be used to implement custom decoders that
    235    rely on the order that the key and value pairs are decoded (for example,
    236    :func:`collections.OrderedDict` will remember the order of insertion). If
    237    *object_hook* is also defined, the *object_pairs_hook* takes priority.
    238 
    239    .. versionchanged:: 2.7
    240       Added support for *object_pairs_hook*.
    241 
    242    *parse_float*, if specified, will be called with the string of every JSON
    243    float to be decoded.  By default, this is equivalent to ``float(num_str)``.
    244    This can be used to use another datatype or parser for JSON floats
    245    (e.g. :class:`decimal.Decimal`).
    246 
    247    *parse_int*, if specified, will be called with the string of every JSON int
    248    to be decoded.  By default, this is equivalent to ``int(num_str)``.  This can
    249    be used to use another datatype or parser for JSON integers
    250    (e.g. :class:`float`).
    251 
    252    *parse_constant*, if specified, will be called with one of the following
    253    strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.
    254    This can be used to raise an exception if invalid JSON numbers
    255    are encountered.
    256 
    257    .. versionchanged:: 2.7
    258       *parse_constant* doesn't get called on 'null', 'true', 'false' anymore.
    259 
    260    To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
    261    kwarg; otherwise :class:`JSONDecoder` is used.  Additional keyword arguments
    262    will be passed to the constructor of the class.
    263 
    264 
    265 .. function:: loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
    266 
    267    Deserialize *s* (a :class:`str` or :class:`unicode` instance containing a JSON
    268    document) to a Python object using this :ref:`conversion table
    269    <json-to-py-table>`.
    270 
    271    If *s* is a :class:`str` instance and is encoded with an ASCII based encoding
    272    other than UTF-8 (e.g. latin-1), then an appropriate *encoding* name must be
    273    specified.  Encodings that are not ASCII based (such as UCS-2) are not
    274    allowed and should be decoded to :class:`unicode` first.
    275 
    276    The other arguments have the same meaning as in :func:`load`.
    277 
    278 
    279 Encoders and Decoders
    280 ---------------------
    281 
    282 .. class:: JSONDecoder([encoding[, object_hook[, parse_float[, parse_int[, parse_constant[, strict[, object_pairs_hook]]]]]]])
    283 
    284    Simple JSON decoder.
    285 
    286    Performs the following translations in decoding by default:
    287 
    288    .. _json-to-py-table:
    289 
    290    +---------------+-------------------+
    291    | JSON          | Python            |
    292    +===============+===================+
    293    | object        | dict              |
    294    +---------------+-------------------+
    295    | array         | list              |
    296    +---------------+-------------------+
    297    | string        | unicode           |
    298    +---------------+-------------------+
    299    | number (int)  | int, long         |
    300    +---------------+-------------------+
    301    | number (real) | float             |
    302    +---------------+-------------------+
    303    | true          | True              |
    304    +---------------+-------------------+
    305    | false         | False             |
    306    +---------------+-------------------+
    307    | null          | None              |
    308    +---------------+-------------------+
    309 
    310    It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their
    311    corresponding ``float`` values, which is outside the JSON spec.
    312 
    313    *encoding* determines the encoding used to interpret any :class:`str` objects
    314    decoded by this instance (UTF-8 by default).  It has no effect when decoding
    315    :class:`unicode` objects.
    316 
    317    Note that currently only encodings that are a superset of ASCII work, strings
    318    of other encodings should be passed in as :class:`unicode`.
    319 
    320    *object_hook*, if specified, will be called with the result of every JSON
    321    object decoded and its return value will be used in place of the given
    322    :class:`dict`.  This can be used to provide custom deserializations (e.g. to
    323    support JSON-RPC class hinting).
    324 
    325    *object_pairs_hook*, if specified will be called with the result of every
    326    JSON object decoded with an ordered list of pairs.  The return value of
    327    *object_pairs_hook* will be used instead of the :class:`dict`.  This
    328    feature can be used to implement custom decoders that rely on the order
    329    that the key and value pairs are decoded (for example,
    330    :func:`collections.OrderedDict` will remember the order of insertion). If
    331    *object_hook* is also defined, the *object_pairs_hook* takes priority.
    332 
    333    .. versionchanged:: 2.7
    334       Added support for *object_pairs_hook*.
    335 
    336    *parse_float*, if specified, will be called with the string of every JSON
    337    float to be decoded.  By default, this is equivalent to ``float(num_str)``.
    338    This can be used to use another datatype or parser for JSON floats
    339    (e.g. :class:`decimal.Decimal`).
    340 
    341    *parse_int*, if specified, will be called with the string of every JSON int
    342    to be decoded.  By default, this is equivalent to ``int(num_str)``.  This can
    343    be used to use another datatype or parser for JSON integers
    344    (e.g. :class:`float`).
    345 
    346    *parse_constant*, if specified, will be called with one of the following
    347    strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.
    348    This can be used to raise an exception if invalid JSON numbers
    349    are encountered.
    350 
    351    If *strict* is false (``True`` is the default), then control characters
    352    will be allowed inside strings.  Control characters in this context are
    353    those with character codes in the 0--31 range, including ``'\t'`` (tab),
    354    ``'\n'``, ``'\r'`` and ``'\0'``.
    355 
    356    If the data being deserialized is not a valid JSON document, a
    357    :exc:`ValueError` will be raised.
    358 
    359    .. method:: decode(s)
    360 
    361       Return the Python representation of *s* (a :class:`str` or
    362       :class:`unicode` instance containing a JSON document).
    363 
    364    .. method:: raw_decode(s)
    365 
    366       Decode a JSON document from *s* (a :class:`str` or :class:`unicode`
    367       beginning with a JSON document) and return a 2-tuple of the Python
    368       representation and the index in *s* where the document ended.
    369 
    370       This can be used to decode a JSON document from a string that may have
    371       extraneous data at the end.
    372 
    373 
    374 .. class:: JSONEncoder([skipkeys[, ensure_ascii[, check_circular[, allow_nan[, sort_keys[, indent[, separators[, encoding[, default]]]]]]]]])
    375 
    376    Extensible JSON encoder for Python data structures.
    377 
    378    Supports the following objects and types by default:
    379 
    380    .. _py-to-json-table:
    381 
    382    +-------------------+---------------+
    383    | Python            | JSON          |
    384    +===================+===============+
    385    | dict              | object        |
    386    +-------------------+---------------+
    387    | list, tuple       | array         |
    388    +-------------------+---------------+
    389    | str, unicode      | string        |
    390    +-------------------+---------------+
    391    | int, long, float  | number        |
    392    +-------------------+---------------+
    393    | True              | true          |
    394    +-------------------+---------------+
    395    | False             | false         |
    396    +-------------------+---------------+
    397    | None              | null          |
    398    +-------------------+---------------+
    399 
    400    To extend this to recognize other objects, subclass and implement a
    401    :meth:`default` method with another method that returns a serializable object
    402    for ``o`` if possible, otherwise it should call the superclass implementation
    403    (to raise :exc:`TypeError`).
    404 
    405    If *skipkeys* is false (the default), then it is a :exc:`TypeError` to
    406    attempt encoding of keys that are not str, int, long, float or ``None``.  If
    407    *skipkeys* is true, such items are simply skipped.
    408 
    409    If *ensure_ascii* is true (the default), all non-ASCII characters in the
    410    output are escaped with ``\uXXXX`` sequences, and the results are
    411    :class:`str` instances consisting of ASCII characters only. If
    412    *ensure_ascii* is false, a result may be a :class:`unicode`
    413    instance. This usually happens if the input contains unicode strings or the
    414    *encoding* parameter is used.
    415 
    416    If *check_circular* is true (the default), then lists, dicts, and custom
    417    encoded objects will be checked for circular references during encoding to
    418    prevent an infinite recursion (which would cause an :exc:`OverflowError`).
    419    Otherwise, no such check takes place.
    420 
    421    If *allow_nan* is true (the default), then ``NaN``, ``Infinity``, and
    422    ``-Infinity`` will be encoded as such.  This behavior is not JSON
    423    specification compliant, but is consistent with most JavaScript based
    424    encoders and decoders.  Otherwise, it will be a :exc:`ValueError` to encode
    425    such floats.
    426 
    427    If *sort_keys* is true (default: ``False``), then the output of dictionaries
    428    will be sorted by key; this is useful for regression tests to ensure that
    429    JSON serializations can be compared on a day-to-day basis.
    430 
    431    If *indent* is a non-negative integer (it is ``None`` by default), then JSON
    432    array elements and object members will be pretty-printed with that indent
    433    level.  An indent level of 0 will only insert newlines.  ``None`` is the most
    434    compact representation.
    435 
    436    .. note::
    437 
    438       Since the default item separator is ``', '``,  the output might include
    439       trailing whitespace when *indent* is specified.  You can use
    440       ``separators=(',', ': ')`` to avoid this.
    441 
    442    If specified, *separators* should be an ``(item_separator, key_separator)``
    443    tuple.  By default, ``(', ', ': ')`` are used.  To get the most compact JSON
    444    representation, you should specify ``(',', ':')`` to eliminate whitespace.
    445 
    446    If specified, *default* should be a function that gets called for objects that
    447    can't otherwise be serialized.  It should return a JSON encodable version of
    448    the object or raise a :exc:`TypeError`.  If not specified, :exc:`TypeError`
    449    is raised.
    450 
    451    If *encoding* is not ``None``, then all input strings will be transformed
    452    into unicode using that encoding prior to JSON-encoding.  The default is
    453    UTF-8.
    454 
    455 
    456    .. method:: default(o)
    457 
    458       Implement this method in a subclass such that it returns a serializable
    459       object for *o*, or calls the base implementation (to raise a
    460       :exc:`TypeError`).
    461 
    462       For example, to support arbitrary iterators, you could implement default
    463       like this::
    464 
    465          def default(self, o):
    466             try:
    467                 iterable = iter(o)
    468             except TypeError:
    469                 pass
    470             else:
    471                 return list(iterable)
    472             # Let the base class default method raise the TypeError
    473             return JSONEncoder.default(self, o)
    474 
    475 
    476    .. method:: encode(o)
    477 
    478       Return a JSON string representation of a Python data structure, *o*.  For
    479       example::
    480 
    481         >>> JSONEncoder().encode({"foo": ["bar", "baz"]})
    482         '{"foo": ["bar", "baz"]}'
    483 
    484 
    485    .. method:: iterencode(o)
    486 
    487       Encode the given object, *o*, and yield each string representation as
    488       available.  For example::
    489 
    490             for chunk in JSONEncoder().iterencode(bigobject):
    491                 mysocket.write(chunk)
    492 
    493 
    494 Standard Compliance and Interoperability
    495 ----------------------------------------
    496 
    497 The JSON format is specified by :rfc:`7159` and by
    498 `ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_.
    499 This section details this module's level of compliance with the RFC.
    500 For simplicity, :class:`JSONEncoder` and :class:`JSONDecoder` subclasses, and
    501 parameters other than those explicitly mentioned, are not considered.
    502 
    503 This module does not comply with the RFC in a strict fashion, implementing some
    504 extensions that are valid JavaScript but not valid JSON.  In particular:
    505 
    506 - Infinite and NaN number values are accepted and output;
    507 - Repeated names within an object are accepted, and only the value of the last
    508   name-value pair is used.
    509 
    510 Since the RFC permits RFC-compliant parsers to accept input texts that are not
    511 RFC-compliant, this module's deserializer is technically RFC-compliant under
    512 default settings.
    513 
    514 Character Encodings
    515 ^^^^^^^^^^^^^^^^^^^
    516 
    517 The RFC requires that JSON be represented using either UTF-8, UTF-16, or
    518 UTF-32, with UTF-8 being the recommended default for maximum interoperability.
    519 Accordingly, this module uses UTF-8 as the default for its *encoding* parameter.
    520 
    521 This module's deserializer only directly works with ASCII-compatible encodings;
    522 UTF-16, UTF-32, and other ASCII-incompatible encodings require the use of
    523 workarounds described in the documentation for the deserializer's *encoding*
    524 parameter.
    525 
    526 As permitted, though not required, by the RFC, this module's serializer sets
    527 *ensure_ascii=True* by default, thus escaping the output so that the resulting
    528 strings only contain ASCII characters.
    529 
    530 The RFC prohibits adding a byte order mark (BOM) to the start of a JSON text,
    531 and this module's serializer does not add a BOM to its output.
    532 The RFC permits, but does not require, JSON deserializers to ignore an initial
    533 BOM in their input.  This module's deserializer raises a :exc:`ValueError`
    534 when an initial BOM is present.
    535 
    536 The RFC does not explicitly forbid JSON strings which contain byte sequences
    537 that don't correspond to valid Unicode characters (e.g. unpaired UTF-16
    538 surrogates), but it does note that they may cause interoperability problems.
    539 By default, this module accepts and outputs (when present in the original
    540 :class:`str`) code points for such sequences.
    541 
    542 
    543 Infinite and NaN Number Values
    544 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    545 
    546 The RFC does not permit the representation of infinite or NaN number values.
    547 Despite that, by default, this module accepts and outputs ``Infinity``,
    548 ``-Infinity``, and ``NaN`` as if they were valid JSON number literal values::
    549 
    550    >>> # Neither of these calls raises an exception, but the results are not valid JSON
    551    >>> json.dumps(float('-inf'))
    552    '-Infinity'
    553    >>> json.dumps(float('nan'))
    554    'NaN'
    555    >>> # Same when deserializing
    556    >>> json.loads('-Infinity')
    557    -inf
    558    >>> json.loads('NaN')
    559    nan
    560 
    561 In the serializer, the *allow_nan* parameter can be used to alter this
    562 behavior.  In the deserializer, the *parse_constant* parameter can be used to
    563 alter this behavior.
    564 
    565 
    566 Repeated Names Within an Object
    567 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    568 
    569 The RFC specifies that the names within a JSON object should be unique, but
    570 does not mandate how repeated names in JSON objects should be handled.  By
    571 default, this module does not raise an exception; instead, it ignores all but
    572 the last name-value pair for a given name::
    573 
    574    >>> weird_json = '{"x": 1, "x": 2, "x": 3}'
    575    >>> json.loads(weird_json)
    576    {u'x': 3}
    577 
    578 The *object_pairs_hook* parameter can be used to alter this behavior.
    579 
    580 
    581 Top-level Non-Object, Non-Array Values
    582 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    583 
    584 The old version of JSON specified by the obsolete :rfc:`4627` required that
    585 the top-level value of a JSON text must be either a JSON object or array
    586 (Python :class:`dict` or :class:`list`), and could not be a JSON null,
    587 boolean, number, or string value.  :rfc:`7159` removed that restriction, and
    588 this module does not and has never implemented that restriction in either its
    589 serializer or its deserializer.
    590 
    591 Regardless, for maximum interoperability, you may wish to voluntarily adhere
    592 to the restriction yourself.
    593 
    594 
    595 Implementation Limitations
    596 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    597 
    598 Some JSON deserializer implementations may set limits on:
    599 
    600 * the size of accepted JSON texts
    601 * the maximum level of nesting of JSON objects and arrays
    602 * the range and precision of JSON numbers
    603 * the content and maximum length of JSON strings
    604 
    605 This module does not impose any such limits beyond those of the relevant
    606 Python datatypes themselves or the Python interpreter itself.
    607 
    608 When serializing to JSON, beware any such limitations in applications that may
    609 consume your JSON.  In particular, it is common for JSON numbers to be
    610 deserialized into IEEE 754 double precision numbers and thus subject to that
    611 representation's range and precision limitations.  This is especially relevant
    612 when serializing Python :class:`int` values of extremely large magnitude, or
    613 when serializing instances of "exotic" numerical types such as
    614 :class:`decimal.Decimal`.
    615 
    616 
    617 .. rubric:: Footnotes
    618 
    619 .. [#rfc-errata] As noted in `the errata for RFC 7159
    620    <https://www.rfc-editor.org/errata_search.php?rfc=7159>`_,
    621    JSON permits literal U+2028 (LINE SEPARATOR) and
    622    U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript
    623    (as of ECMAScript Edition 5.1) does not.
    624