json.rst 24 KB
Newer Older
1 2 3 4 5 6 7 8
:mod:`json` --- JSON encoder and decoder
========================================

.. module:: json
   :synopsis: Encode and decode the JSON format.
.. moduleauthor:: Bob Ippolito <bob@redivi.com>
.. sectionauthor:: Bob Ippolito <bob@redivi.com>

9
`JSON (JavaScript Object Notation) <http://json.org>`_, specified by
10 11 12 13 14
:rfc:`7159` (which obsoletes :rfc:`4627`) and by
`ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_,
is a lightweight data interchange format inspired by
`JavaScript <http://en.wikipedia.org/wiki/JavaScript>`_ object literal syntax
(although it is not a strict subset of JavaScript [#rfc-errata]_ ).
15 16 17 18 19

:mod:`json` exposes an API familiar to users of the standard library
:mod:`marshal` and :mod:`pickle` modules.

Encoding basic Python object hierarchies::
20

21 22 23
    >>> import json
    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
24
    >>> print(json.dumps("\"foo\bar"))
25
    "\"foo\bar"
26
    >>> print(json.dumps('\u1234'))
27
    "\u1234"
28
    >>> print(json.dumps('\\'))
29
    "\\"
30
    >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
31
    {"a": 0, "b": 0, "c": 0}
32
    >>> from io import StringIO
33 34 35 36 37 38 39 40
    >>> io = StringIO()
    >>> json.dump(['streaming API'], io)
    >>> io.getvalue()
    '["streaming API"]'

Compact encoding::

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

Pretty printing::

    >>> import json
47
    >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
48
    {
49
        "4": 5,
50 51 52 53
        "6": 7
    }

Decoding JSON::
54

55 56
    >>> import json
    >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
57
    ['foo', {'bar': ['baz', None, 1.0, 2]}]
58
    >>> json.loads('"\\"foo\\bar"')
59 60
    '"foo\x08ar'
    >>> from io import StringIO
61 62
    >>> io = StringIO('["streaming API"]')
    >>> json.load(io)
63
    ['streaming API']
64 65 66 67 68 69 70 71

Specializing JSON object decoding::

    >>> import json
    >>> def as_complex(dct):
    ...     if '__complex__' in dct:
    ...         return complex(dct['real'], dct['imag'])
    ...     return dct
72
    ...
73 74 75 76 77 78 79 80
    >>> 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 :class:`JSONEncoder`::
81

82 83 84 85 86
    >>> import json
    >>> class ComplexEncoder(json.JSONEncoder):
    ...     def default(self, obj):
    ...         if isinstance(obj, complex):
    ...             return [obj.real, obj.imag]
87
    ...         # Let the base class default method raise the TypeError
88
    ...         return json.JSONEncoder.default(self, obj)
89
    ...
90
    >>> json.dumps(2 + 1j, cls=ComplexEncoder)
91 92 93 94
    '[2.0, 1.0]'
    >>> ComplexEncoder().encode(2 + 1j)
    '[2.0, 1.0]'
    >>> list(ComplexEncoder().iterencode(2 + 1j))
95
    ['[2.0', ', 1.0', ']']
96

97

98
.. highlight:: bash
99 100

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

102
    $ echo '{"json":"obj"}' | python -m json.tool
103 104 105
    {
        "json": "obj"
    }
106
    $ echo '{1.2:3.4}' | python -m json.tool
107
    Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
108

109
.. highlight:: python3
110

111
.. note::
112

113 114 115 116
   JSON is a subset of `YAML <http://yaml.org/>`_ 1.2.  The JSON produced by
   this module's default settings (in particular, the default *separators*
   value) is also a subset of YAML 1.0 and 1.1.  This module can thus also be
   used as a YAML serializer.
117 118 119 120 121


Basic Usage
-----------

122 123 124 125
.. function:: dump(obj, fp, skipkeys=False, ensure_ascii=True, \
                   check_circular=True, allow_nan=True, cls=None, \
                   indent=None, separators=None, default=None, \
                   sort_keys=False, **kw)
126 127

   Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting
128 129
   :term:`file-like object`) using this :ref:`conversion table
   <py-to-json-table>`.
130 131

   If *skipkeys* is ``True`` (default: ``False``), then dict keys that are not
132 133
   of a basic type (:class:`str`, :class:`int`, :class:`float`, :class:`bool`,
   ``None``) will be skipped instead of raising a :exc:`TypeError`.
134

135 136 137 138
   The :mod:`json` module always produces :class:`str` objects, not
   :class:`bytes` objects. Therefore, ``fp.write()`` must support :class:`str`
   input.

139 140 141 142
   If *ensure_ascii* is ``True`` (the default), the output is guaranteed to
   have all incoming non-ASCII characters escaped.  If *ensure_ascii* is
   ``False``, these characters will be output as-is.

143 144 145 146 147 148 149 150 151
   If *check_circular* is ``False`` (default: ``True``), then the circular
   reference check for container types will be skipped and a circular reference
   will result in an :exc:`OverflowError` (or worse).

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

152 153
   If *indent* is a non-negative integer or string, then JSON array elements and
   object members will be pretty-printed with that indent level.  An indent level
154 155
   of 0, negative, or ``""`` will only insert newlines.  ``None`` (the default)
   selects the most compact representation. Using a positive integer indent
Petri Lehtinen's avatar
Petri Lehtinen committed
156
   indents that many spaces per level.  If *indent* is a string (such as ``"\t"``),
157
   that string is used to indent each level.
158

159 160 161
   .. versionchanged:: 3.2
      Allow strings for *indent* in addition to integers.

162 163 164 165 166 167 168
   If specified, *separators* should be an ``(item_separator, key_separator)``
   tuple.  The default is ``(', ', ': ')`` if *indent* is ``None`` and
   ``(',', ': ')`` otherwise.  To get the most compact JSON representation,
   you should specify ``(',', ':')`` to eliminate whitespace.

   .. versionchanged:: 3.4
      Use ``(',', ': ')`` as default if *indent* is not ``None``.
169 170 171 172

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

173 174 175
   If *sort_keys* is ``True`` (default: ``False``), then the output of
   dictionaries will be sorted by key.

176
   To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
177
   :meth:`default` method to serialize additional types), specify it with the
178
   *cls* kwarg; otherwise :class:`JSONEncoder` is used.
179 180


181 182 183 184
.. function:: dumps(obj, skipkeys=False, ensure_ascii=True, \
                    check_circular=True, allow_nan=True, cls=None, \
                    indent=None, separators=None, default=None, \
                    sort_keys=False, **kw)
185

186 187 188
   Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion
   table <py-to-json-table>`.  The arguments have the same meaning as in
   :func:`dump`.
189

190 191
   .. note::

Georg Brandl's avatar
Georg Brandl committed
192 193 194 195
      Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol,
      so trying to serialize multiple objects with repeated calls to
      :func:`dump` using the same *fp* will result in an invalid JSON file.

196 197 198 199
   .. note::

      Keys in key/value pairs of JSON are always of the type :class:`str`. When
      a dictionary is converted into JSON, all the keys of the dictionary are
200
      coerced to strings. As a result of this, if a dictionary is converted
201 202 203
      into JSON and then back into a dictionary, the dictionary may not equal
      the original one. That is, ``loads(dumps(x)) != x`` if x has non-string
      keys.
204

205
.. function:: load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
206

Antoine Pitrou's avatar
Antoine Pitrou committed
207
   Deserialize *fp* (a ``.read()``-supporting :term:`file-like object`
208 209
   containing a JSON document) to a Python object using this :ref:`conversion
   table <json-to-py-table>`.
210 211

   *object_hook* is an optional function that will be called with the result of
Benjamin Peterson's avatar
Benjamin Peterson committed
212
   any object literal decoded (a :class:`dict`).  The return value of
213
   *object_hook* will be used instead of the :class:`dict`.  This feature can be used
214 215
   to implement custom decoders (e.g. `JSON-RPC <http://www.jsonrpc.org>`_
   class hinting).
216

217
   *object_pairs_hook* is an optional function that will be called with the
Benjamin Peterson's avatar
Benjamin Peterson committed
218
   result of any object literal decoded with an ordered list of pairs.  The
219 220 221 222 223 224 225
   return value of *object_pairs_hook* will be used instead of the
   :class:`dict`.  This feature can be used to implement custom decoders that
   rely on the order that the key and value pairs are decoded (for example,
   :func:`collections.OrderedDict` will remember the order of insertion). If
   *object_hook* is also defined, the *object_pairs_hook* takes priority.

   .. versionchanged:: 3.1
226
      Added support for *object_pairs_hook*.
227

228 229 230 231 232 233 234 235 236 237 238
   *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. :class:`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. :class:`float`).

   *parse_constant*, if specified, will be called with one of the following
239 240
   strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.
   This can be used to raise an exception if invalid JSON numbers
241 242
   are encountered.

243
   .. versionchanged:: 3.1
244 245
      *parse_constant* doesn't get called on 'null', 'true', 'false' anymore.

246
   To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
247 248
   kwarg; otherwise :class:`JSONDecoder` is used.  Additional keyword arguments
   will be passed to the constructor of the class.
249

250 251
   If the data being deserialized is not a valid JSON document, a
   :exc:`ValueError` will be raised.
252

253
.. function:: loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
254

255
   Deserialize *s* (a :class:`str` instance containing a JSON document) to a
256
   Python object using this :ref:`conversion table <json-to-py-table>`.
257

258 259
   The other arguments have the same meaning as in :func:`load`, except
   *encoding* which is ignored and deprecated.
260

261 262
   If the data being deserialized is not a valid JSON document, a
   :exc:`ValueError` will be raised.
263

264
Encoders and Decoders
265 266
---------------------

267
.. class:: JSONDecoder(object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)
268 269 270 271 272

   Simple JSON decoder.

   Performs the following translations in decoding by default:

273 274
   .. _json-to-py-table:

275 276 277 278 279 280 281
   +---------------+-------------------+
   | JSON          | Python            |
   +===============+===================+
   | object        | dict              |
   +---------------+-------------------+
   | array         | list              |
   +---------------+-------------------+
282
   | string        | str               |
283
   +---------------+-------------------+
284
   | number (int)  | int               |
285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302
   +---------------+-------------------+
   | number (real) | float             |
   +---------------+-------------------+
   | true          | True              |
   +---------------+-------------------+
   | false         | False             |
   +---------------+-------------------+
   | null          | None              |
   +---------------+-------------------+

   It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their
   corresponding ``float`` values, which is outside the JSON spec.

   *object_hook*, if specified, will be called with the result of every JSON
   object decoded and its return value will be used in place of the given
   :class:`dict`.  This can be used to provide custom deserializations (e.g. to
   support JSON-RPC class hinting).

303 304 305 306 307 308 309 310 311
   *object_pairs_hook*, if specified will be called with the result of every
   JSON object decoded with an ordered list of pairs.  The return value of
   *object_pairs_hook* will be used instead of the :class:`dict`.  This
   feature can be used to implement custom decoders that rely on the order
   that the key and value pairs are decoded (for example,
   :func:`collections.OrderedDict` will remember the order of insertion). If
   *object_hook* is also defined, the *object_pairs_hook* takes priority.

   .. versionchanged:: 3.1
312
      Added support for *object_pairs_hook*.
313

314 315 316 317 318 319 320 321 322 323 324 325 326 327 328
   *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. :class:`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. :class:`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.

329 330 331 332 333
   If *strict* is ``False`` (``True`` is the default), then control characters
   will be allowed inside strings.  Control characters in this context are
   those with character codes in the 0-31 range, including ``'\t'`` (tab),
   ``'\n'``, ``'\r'`` and ``'\0'``.

334 335
   If the data being deserialized is not a valid JSON document, a
   :exc:`ValueError` will be raised.
336 337 338

   .. method:: decode(s)

339 340
      Return the Python representation of *s* (a :class:`str` instance
      containing a JSON document)
341 342 343

   .. method:: raw_decode(s)

344 345 346
      Decode a JSON document from *s* (a :class:`str` beginning with a
      JSON document) and return a 2-tuple of the Python representation
      and the index in *s* where the document ended.
347 348 349 350 351

      This can be used to decode a JSON document from a string that may have
      extraneous data at the end.


352
.. class:: JSONEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)
353 354 355 356 357

   Extensible JSON encoder for Python data structures.

   Supports the following objects and types by default:

358 359
   .. _py-to-json-table:

360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379
   +----------------------------------------+---------------+
   | Python                                 | JSON          |
   +========================================+===============+
   | dict                                   | object        |
   +----------------------------------------+---------------+
   | list, tuple                            | array         |
   +----------------------------------------+---------------+
   | str                                    | string        |
   +----------------------------------------+---------------+
   | int, float, int- & float-derived Enums | number        |
   +----------------------------------------+---------------+
   | True                                   | true          |
   +----------------------------------------+---------------+
   | False                                  | false         |
   +----------------------------------------+---------------+
   | None                                   | null          |
   +----------------------------------------+---------------+

   .. versionchanged:: 3.4
      Added support for int- and float-derived Enum classes.
380 381 382 383 384 385 386

   To extend this to recognize other objects, subclass and implement a
   :meth:`default` method with another method that returns a serializable object
   for ``o`` if possible, otherwise it should call the superclass implementation
   (to raise :exc:`TypeError`).

   If *skipkeys* is ``False`` (the default), then it is a :exc:`TypeError` to
387
   attempt encoding of keys that are not str, int, float or None.  If
388 389
   *skipkeys* is ``True``, such items are simply skipped.

390 391 392
   If *ensure_ascii* is ``True`` (the default), the output is guaranteed to
   have all incoming non-ASCII characters escaped.  If *ensure_ascii* is
   ``False``, these characters will be output as-is.
393 394 395 396 397 398 399 400 401 402 403 404

   If *check_circular* is ``True`` (the default), then lists, dicts, and custom
   encoded objects will be checked for circular references during encoding to
   prevent an infinite recursion (which would cause an :exc:`OverflowError`).
   Otherwise, no such check takes place.

   If *allow_nan* is ``True`` (the default), then ``NaN``, ``Infinity``, and
   ``-Infinity`` will be encoded as such.  This behavior is not JSON
   specification compliant, but is consistent with most JavaScript based
   encoders and decoders.  Otherwise, it will be a :exc:`ValueError` to encode
   such floats.

405
   If *sort_keys* is ``True`` (default ``False``), then the output of dictionaries
406 407 408
   will be sorted by key; this is useful for regression tests to ensure that
   JSON serializations can be compared on a day-to-day basis.

409 410 411 412 413 414 415 416 417
   If *indent* is a non-negative integer or string, then JSON array elements and
   object members will be pretty-printed with that indent level.  An indent level
   of 0, negative, or ``""`` will only insert newlines.  ``None`` (the default)
   selects the most compact representation. Using a positive integer indent
   indents that many spaces per level.  If *indent* is a string (such as ``"\t"``),
   that string is used to indent each level.

   .. versionchanged:: 3.2
      Allow strings for *indent* in addition to integers.
418 419

   If specified, *separators* should be an ``(item_separator, key_separator)``
420 421 422 423 424 425
   tuple.  The default is ``(', ', ': ')`` if *indent* is ``None`` and
   ``(',', ': ')`` otherwise.  To get the most compact JSON representation,
   you should specify ``(',', ':')`` to eliminate whitespace.

   .. versionchanged:: 3.4
      Use ``(',', ': ')`` as default if *indent* is not ``None``.
426 427 428 429 430 431 432 433 434 435 436 437 438 439

   If specified, *default* is a function that gets called for objects that can't
   otherwise be serialized.  It should return a JSON encodable version of the
   object or raise a :exc:`TypeError`.


   .. method:: default(o)

      Implement this method in a subclass such that it returns a serializable
      object for *o*, or calls the base implementation (to raise a
      :exc:`TypeError`).

      For example, to support arbitrary iterators, you could implement default
      like this::
440

441 442
         def default(self, o):
            try:
Benjamin Peterson's avatar
Benjamin Peterson committed
443
                iterable = iter(o)
444
            except TypeError:
Benjamin Peterson's avatar
Benjamin Peterson committed
445
                pass
446 447
            else:
                return list(iterable)
448
            # Let the base class default method raise the TypeError
449
            return json.JSONEncoder.default(self, o)
450 451 452 453 454 455 456


   .. method:: encode(o)

      Return a JSON string representation of a Python data structure, *o*.  For
      example::

457
        >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
458 459 460 461 462 463 464
        '{"foo": ["bar", "baz"]}'


   .. method:: iterencode(o)

      Encode the given object, *o*, and yield each string representation as
      available.  For example::
465

466
            for chunk in json.JSONEncoder().iterencode(bigobject):
467
                mysocket.write(chunk)
468 469


470 471
Standard Compliance and Interoperability
----------------------------------------
472

473 474 475 476 477
The JSON format is specified by :rfc:`7159` and by
`ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_.
This section details this module's level of compliance with the RFC.
For simplicity, :class:`JSONEncoder` and :class:`JSONDecoder` subclasses, and
parameters other than those explicitly mentioned, are not considered.
478 479 480 481 482 483 484 485 486 487 488 489 490 491 492

This module does not comply with the RFC in a strict fashion, implementing some
extensions that are valid JavaScript but not valid JSON.  In particular:

- Infinite and NaN number values are accepted and output;
- Repeated names within an object are accepted, and only the value of the last
  name-value pair is used.

Since the RFC permits RFC-compliant parsers to accept input texts that are not
RFC-compliant, this module's deserializer is technically RFC-compliant under
default settings.

Character Encodings
^^^^^^^^^^^^^^^^^^^

493 494
The RFC requires that JSON be represented using either UTF-8, UTF-16, or
UTF-32, with UTF-8 being the recommended default for maximum interoperability.
495 496 497 498 499 500 501

As permitted, though not required, by the RFC, this module's serializer sets
*ensure_ascii=True* by default, thus escaping the output so that the resulting
strings only contain ASCII characters.

Other than the *ensure_ascii* parameter, this module is defined strictly in
terms of conversion between Python objects and
502 503
:class:`Unicode strings <str>`, and thus does not otherwise directly address
the issue of character encodings.
504

505 506 507 508 509
The RFC prohibits adding a byte order mark (BOM) to the start of a JSON text,
and this module's serializer does not add a BOM to its output.
The RFC permits, but does not require, JSON deserializers to ignore an initial
BOM in their input.  This module's deserializer raises a :exc:`ValueError`
when an initial BOM is present.
510

511 512 513 514
The RFC does not explicitly forbid JSON strings which contain byte sequences
that don't correspond to valid Unicode characters (e.g. unpaired UTF-16
surrogates), but it does note that they may cause interoperability problems.
By default, this module accepts and outputs (when present in the original
515
:class:`str`) code points for such sequences.
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544


Infinite and NaN Number Values
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The RFC does not permit the representation of infinite or NaN number values.
Despite that, by default, this module accepts and outputs ``Infinity``,
``-Infinity``, and ``NaN`` as if they were valid JSON number literal values::

   >>> # Neither of these calls raises an exception, but the results are not valid JSON
   >>> json.dumps(float('-inf'))
   '-Infinity'
   >>> json.dumps(float('nan'))
   'NaN'
   >>> # Same when deserializing
   >>> json.loads('-Infinity')
   -inf
   >>> json.loads('NaN')
   nan

In the serializer, the *allow_nan* parameter can be used to alter this
behavior.  In the deserializer, the *parse_constant* parameter can be used to
alter this behavior.


Repeated Names Within an Object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The RFC specifies that the names within a JSON object should be unique, but
545
does not mandate how repeated names in JSON objects should be handled.  By
546 547 548 549 550 551 552 553
default, this module does not raise an exception; instead, it ignores all but
the last name-value pair for a given name::

   >>> weird_json = '{"x": 1, "x": 2, "x": 3}'
   >>> json.loads(weird_json)
   {'x': 3}

The *object_pairs_hook* parameter can be used to alter this behavior.
554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598


Top-level Non-Object, Non-Array Values
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The old version of JSON specified by the obsolete :rfc:`4627` required that
the top-level value of a JSON text must be either a JSON object or array
(Python :class:`dict` or :class:`list`), and could not be a JSON null,
boolean, number, or string value.  :rfc:`7159` removed that restriction, and
this module does not and has never implemented that restriction in either its
serializer or its deserializer.

Regardless, for maximum interoperability, you may wish to voluntarily adhere
to the restriction yourself.


Implementation Limitations
^^^^^^^^^^^^^^^^^^^^^^^^^^

Some JSON deserializer implementations may set limits on:

* the size of accepted JSON texts
* the maximum level of nesting of JSON objects and arrays
* the range and precision of JSON numbers
* the content and maximum length of JSON strings

This module does not impose any such limits beyond those of the relevant
Python datatypes themselves or the Python interpreter itself.

When serializing to JSON, beware any such limitations in applications that may
consume your JSON.  In particular, it is common for JSON numbers to be
deserialized into IEEE 754 double precision numbers and thus subject to that
representation's range and precision limitations.  This is especially relevant
when serializing Python :class:`int` values of extremely large magnitude, or
when serializing instances of "exotic" numerical types such as
:class:`decimal.Decimal`.


.. rubric:: Footnotes

.. [#rfc-errata] As noted in `the errata for RFC 7159
   <http://www.rfc-editor.org/errata_search.php?rfc=7159>`_,
   JSON permits literal U+2028 (LINE SEPARATOR) and
   U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript
   (as of ECMAScript Edition 5.1) does not.