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