blob: bcad61aeca3b15b9c49426d65c8f8b04fbde5ded [file] [log] [blame]
Christian Heimes90540002008-05-08 14:29:10 +00001:mod:`json` --- JSON encoder and decoder
2========================================
3
4.. module:: json
5 :synopsis: Encode and decode the JSON format.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Christian Heimes90540002008-05-08 14:29:10 +00007.. moduleauthor:: Bob Ippolito <bob@redivi.com>
8.. sectionauthor:: Bob Ippolito <bob@redivi.com>
Christian Heimes90540002008-05-08 14:29:10 +00009
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040010**Source code:** :source:`Lib/json/__init__.py`
11
12--------------
13
Antoine Pitrou331624b2012-08-24 19:37:23 +020014`JSON (JavaScript Object Notation) <http://json.org>`_, specified by
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +020015: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
Georg Brandl5d941342016-02-26 19:37:12 +010018`JavaScript <https://en.wikipedia.org/wiki/JavaScript>`_ object literal syntax
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +020019(although it is not a strict subset of JavaScript [#rfc-errata]_ ).
Christian Heimes90540002008-05-08 14:29:10 +000020
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::
Georg Brandl48310cd2009-01-03 21:18:54 +000025
Christian Heimes90540002008-05-08 14:29:10 +000026 >>> import json
27 >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
28 '["foo", {"bar": ["baz", null, 1.0, 2]}]'
Neal Norwitz752abd02008-05-13 04:55:24 +000029 >>> print(json.dumps("\"foo\bar"))
Christian Heimes90540002008-05-08 14:29:10 +000030 "\"foo\bar"
Benjamin Peterson2505bc62008-05-15 02:17:58 +000031 >>> print(json.dumps('\u1234'))
Christian Heimes90540002008-05-08 14:29:10 +000032 "\u1234"
Neal Norwitz752abd02008-05-13 04:55:24 +000033 >>> print(json.dumps('\\'))
Christian Heimes90540002008-05-08 14:29:10 +000034 "\\"
Neal Norwitz752abd02008-05-13 04:55:24 +000035 >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
Christian Heimes90540002008-05-08 14:29:10 +000036 {"a": 0, "b": 0, "c": 0}
Benjamin Peterson2505bc62008-05-15 02:17:58 +000037 >>> from io import StringIO
Christian Heimes90540002008-05-08 14:29:10 +000038 >>> io = StringIO()
39 >>> json.dump(['streaming API'], io)
40 >>> io.getvalue()
41 '["streaming API"]'
42
43Compact encoding::
44
45 >>> import json
Sergey Fedoseeva7fbad92017-09-09 21:39:36 +050046 >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
Christian Heimes90540002008-05-08 14:29:10 +000047 '[1,2,3,{"4":5,"6":7}]'
48
49Pretty printing::
50
51 >>> import json
Neal Norwitz752abd02008-05-13 04:55:24 +000052 >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
Christian Heimes90540002008-05-08 14:29:10 +000053 {
Georg Brandl48310cd2009-01-03 21:18:54 +000054 "4": 5,
Christian Heimes90540002008-05-08 14:29:10 +000055 "6": 7
56 }
57
58Decoding JSON::
Georg Brandl48310cd2009-01-03 21:18:54 +000059
Christian Heimes90540002008-05-08 14:29:10 +000060 >>> import json
61 >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
Benjamin Peterson2505bc62008-05-15 02:17:58 +000062 ['foo', {'bar': ['baz', None, 1.0, 2]}]
Christian Heimes90540002008-05-08 14:29:10 +000063 >>> json.loads('"\\"foo\\bar"')
Benjamin Peterson2505bc62008-05-15 02:17:58 +000064 '"foo\x08ar'
65 >>> from io import StringIO
Christian Heimes90540002008-05-08 14:29:10 +000066 >>> io = StringIO('["streaming API"]')
67 >>> json.load(io)
Benjamin Peterson2505bc62008-05-15 02:17:58 +000068 ['streaming API']
Christian Heimes90540002008-05-08 14:29:10 +000069
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
Benjamin Peterson2505bc62008-05-15 02:17:58 +000077 ...
Christian Heimes90540002008-05-08 14:29:10 +000078 >>> 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`::
Georg Brandl48310cd2009-01-03 21:18:54 +000086
Christian Heimes90540002008-05-08 14:29:10 +000087 >>> import json
88 >>> class ComplexEncoder(json.JSONEncoder):
89 ... def default(self, obj):
90 ... if isinstance(obj, complex):
91 ... return [obj.real, obj.imag]
R David Murraydd246172013-03-17 21:52:35 -040092 ... # Let the base class default method raise the TypeError
Christian Heimes90540002008-05-08 14:29:10 +000093 ... return json.JSONEncoder.default(self, obj)
Benjamin Peterson2505bc62008-05-15 02:17:58 +000094 ...
Georg Brandl0bb73b82010-09-03 22:36:22 +000095 >>> json.dumps(2 + 1j, cls=ComplexEncoder)
Christian Heimes90540002008-05-08 14:29:10 +000096 '[2.0, 1.0]'
97 >>> ComplexEncoder().encode(2 + 1j)
98 '[2.0, 1.0]'
99 >>> list(ComplexEncoder().iterencode(2 + 1j))
Georg Brandl0bb73b82010-09-03 22:36:22 +0000100 ['[2.0', ', 1.0', ']']
Georg Brandl48310cd2009-01-03 21:18:54 +0000101
Christian Heimes90540002008-05-08 14:29:10 +0000102
Ezio Melotti84e59aa2012-04-13 21:02:18 -0600103.. highlight:: bash
Christian Heimes90540002008-05-08 14:29:10 +0000104
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300105Using :mod:`json.tool` from the shell to validate and pretty-print::
Georg Brandl48310cd2009-01-03 21:18:54 +0000106
Georg Brandl946faa32014-10-28 22:54:24 +0100107 $ echo '{"json":"obj"}' | python -m json.tool
Christian Heimes90540002008-05-08 14:29:10 +0000108 {
109 "json": "obj"
110 }
Georg Brandl946faa32014-10-28 22:54:24 +0100111 $ echo '{1.2:3.4}' | python -m json.tool
Serhiy Storchakac510a042013-02-21 20:19:16 +0200112 Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Christian Heimes90540002008-05-08 14:29:10 +0000113
Benjamin Peterson940e2072014-03-21 23:17:29 -0500114See :ref:`json-commandline` for detailed documentation.
115
Ezio Melotti84e59aa2012-04-13 21:02:18 -0600116.. highlight:: python3
Christian Heimes90540002008-05-08 14:29:10 +0000117
Georg Brandl48310cd2009-01-03 21:18:54 +0000118.. note::
Christian Heimes90540002008-05-08 14:29:10 +0000119
Antoine Pitrou331624b2012-08-24 19:37:23 +0200120 JSON is a subset of `YAML <http://yaml.org/>`_ 1.2. The JSON produced by
121 this module's default settings (in particular, the default *separators*
122 value) is also a subset of YAML 1.0 and 1.1. This module can thus also be
123 used as a YAML serializer.
Christian Heimes90540002008-05-08 14:29:10 +0000124
125
126Basic Usage
127-----------
128
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300129.. function:: dump(obj, fp, *, skipkeys=False, ensure_ascii=True, \
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200130 check_circular=True, allow_nan=True, cls=None, \
131 indent=None, separators=None, default=None, \
132 sort_keys=False, **kw)
Christian Heimes90540002008-05-08 14:29:10 +0000133
134 Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200135 :term:`file-like object`) using this :ref:`conversion table
136 <py-to-json-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000137
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300138 If *skipkeys* is true (default: ``False``), then dict keys that are not
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000139 of a basic type (:class:`str`, :class:`int`, :class:`float`, :class:`bool`,
140 ``None``) will be skipped instead of raising a :exc:`TypeError`.
Christian Heimes90540002008-05-08 14:29:10 +0000141
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000142 The :mod:`json` module always produces :class:`str` objects, not
143 :class:`bytes` objects. Therefore, ``fp.write()`` must support :class:`str`
144 input.
145
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300146 If *ensure_ascii* is true (the default), the output is guaranteed to
Éric Araujo6f7aa002012-01-16 10:09:20 +0100147 have all incoming non-ASCII characters escaped. If *ensure_ascii* is
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300148 false, these characters will be output as-is.
Éric Araujo6f7aa002012-01-16 10:09:20 +0100149
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300150 If *check_circular* is false (default: ``True``), then the circular
Christian Heimes90540002008-05-08 14:29:10 +0000151 reference check for container types will be skipped and a circular reference
152 will result in an :exc:`OverflowError` (or worse).
153
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300154 If *allow_nan* is false (default: ``True``), then it will be a
Christian Heimes90540002008-05-08 14:29:10 +0000155 :exc:`ValueError` to serialize out of range :class:`float` values (``nan``,
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300156 ``inf``, ``-inf``) in strict compliance of the JSON specification.
157 If *allow_nan* is true, their JavaScript equivalents (``NaN``,
158 ``Infinity``, ``-Infinity``) will be used.
Christian Heimes90540002008-05-08 14:29:10 +0000159
Raymond Hettingerb643ef82010-10-31 08:00:16 +0000160 If *indent* is a non-negative integer or string, then JSON array elements and
161 object members will be pretty-printed with that indent level. An indent level
R David Murrayd5315482011-04-12 21:09:18 -0400162 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default)
163 selects the most compact representation. Using a positive integer indent
Petri Lehtinen72c6eef2012-08-27 20:27:30 +0300164 indents that many spaces per level. If *indent* is a string (such as ``"\t"``),
R David Murrayd5315482011-04-12 21:09:18 -0400165 that string is used to indent each level.
Christian Heimes90540002008-05-08 14:29:10 +0000166
Petri Lehtinen72b14262012-08-28 07:08:44 +0300167 .. versionchanged:: 3.2
168 Allow strings for *indent* in addition to integers.
169
Ezio Melotti10031442012-11-29 00:42:56 +0200170 If specified, *separators* should be an ``(item_separator, key_separator)``
171 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
172 ``(',', ': ')`` otherwise. To get the most compact JSON representation,
173 you should specify ``(',', ':')`` to eliminate whitespace.
174
175 .. versionchanged:: 3.4
176 Use ``(',', ': ')`` as default if *indent* is not ``None``.
Christian Heimes90540002008-05-08 14:29:10 +0000177
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300178 If specified, *default* should be a function that gets called for objects that
179 can't otherwise be serialized. It should return a JSON encodable version of
180 the object or raise a :exc:`TypeError`. If not specified, :exc:`TypeError`
181 is raised.
Christian Heimes90540002008-05-08 14:29:10 +0000182
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300183 If *sort_keys* is true (default: ``False``), then the output of
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200184 dictionaries will be sorted by key.
185
Georg Brandl1f01deb2009-01-03 22:47:39 +0000186 To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
Christian Heimes90540002008-05-08 14:29:10 +0000187 :meth:`default` method to serialize additional types), specify it with the
Georg Brandld4460aa2010-10-15 17:03:02 +0000188 *cls* kwarg; otherwise :class:`JSONEncoder` is used.
Christian Heimes90540002008-05-08 14:29:10 +0000189
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300190 .. versionchanged:: 3.6
191 All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`.
Christian Heimes90540002008-05-08 14:29:10 +0000192
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300193
194.. function:: dumps(obj, *, skipkeys=False, ensure_ascii=True, \
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200195 check_circular=True, allow_nan=True, cls=None, \
196 indent=None, separators=None, default=None, \
197 sort_keys=False, **kw)
Christian Heimes90540002008-05-08 14:29:10 +0000198
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200199 Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion
200 table <py-to-json-table>`. The arguments have the same meaning as in
201 :func:`dump`.
Christian Heimes90540002008-05-08 14:29:10 +0000202
Ezio Melotti60adf952011-04-15 07:37:00 +0300203 .. note::
204
Georg Brandl340d2692011-04-16 16:54:15 +0200205 Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol,
206 so trying to serialize multiple objects with repeated calls to
207 :func:`dump` using the same *fp* will result in an invalid JSON file.
208
Senthil Kumaranf2123d22012-03-17 00:40:34 -0700209 .. note::
210
211 Keys in key/value pairs of JSON are always of the type :class:`str`. When
212 a dictionary is converted into JSON, all the keys of the dictionary are
Terry Jan Reedy9cbcc2f2013-03-08 19:35:15 -0500213 coerced to strings. As a result of this, if a dictionary is converted
Senthil Kumaranf2123d22012-03-17 00:40:34 -0700214 into JSON and then back into a dictionary, the dictionary may not equal
215 the original one. That is, ``loads(dumps(x)) != x`` if x has non-string
216 keys.
Christian Heimes90540002008-05-08 14:29:10 +0000217
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300218.. function:: load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
Christian Heimes90540002008-05-08 14:29:10 +0000219
Antoine Pitrou15251a92012-08-24 19:49:08 +0200220 Deserialize *fp* (a ``.read()``-supporting :term:`file-like object`
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200221 containing a JSON document) to a Python object using this :ref:`conversion
222 table <json-to-py-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000223
Christian Heimes90540002008-05-08 14:29:10 +0000224 *object_hook* is an optional function that will be called with the result of
Benjamin Peterson25c95f12009-05-08 20:42:26 +0000225 any object literal decoded (a :class:`dict`). The return value of
Christian Heimes90540002008-05-08 14:29:10 +0000226 *object_hook* will be used instead of the :class:`dict`. This feature can be used
Antoine Pitrou331624b2012-08-24 19:37:23 +0200227 to implement custom decoders (e.g. `JSON-RPC <http://www.jsonrpc.org>`_
228 class hinting).
Christian Heimes90540002008-05-08 14:29:10 +0000229
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000230 *object_pairs_hook* is an optional function that will be called with the
Benjamin Peterson25c95f12009-05-08 20:42:26 +0000231 result of any object literal decoded with an ordered list of pairs. The
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000232 return value of *object_pairs_hook* will be used instead of the
INADA Naoki629338f2018-04-03 12:39:47 +0900233 :class:`dict`. This feature can be used to implement custom decoders.
234 If *object_hook* is also defined, the *object_pairs_hook* takes priority.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000235
236 .. versionchanged:: 3.1
Hirokazu Yamamotoae9eb5c2009-04-26 03:34:06 +0000237 Added support for *object_pairs_hook*.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000238
Christian Heimes90540002008-05-08 14:29:10 +0000239 *parse_float*, if specified, will be called with the string of every JSON
240 float to be decoded. By default, this is equivalent to ``float(num_str)``.
241 This can be used to use another datatype or parser for JSON floats
242 (e.g. :class:`decimal.Decimal`).
243
244 *parse_int*, if specified, will be called with the string of every JSON int
245 to be decoded. By default, this is equivalent to ``int(num_str)``. This can
246 be used to use another datatype or parser for JSON integers
247 (e.g. :class:`float`).
248
249 *parse_constant*, if specified, will be called with one of the following
Hynek Schlawack9729fd42012-05-16 19:01:04 +0200250 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.
251 This can be used to raise an exception if invalid JSON numbers
Christian Heimes90540002008-05-08 14:29:10 +0000252 are encountered.
253
Hynek Schlawackf54c0602012-05-20 18:32:53 +0200254 .. versionchanged:: 3.1
Hynek Schlawack1203e832012-05-20 12:03:17 +0200255 *parse_constant* doesn't get called on 'null', 'true', 'false' anymore.
256
Christian Heimes90540002008-05-08 14:29:10 +0000257 To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
Georg Brandld4460aa2010-10-15 17:03:02 +0000258 kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments
259 will be passed to the constructor of the class.
Christian Heimes90540002008-05-08 14:29:10 +0000260
Felix Crux60fb9712013-08-12 17:39:51 -0400261 If the data being deserialized is not a valid JSON document, a
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200262 :exc:`JSONDecodeError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000263
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300264 .. versionchanged:: 3.6
265 All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`.
266
267.. function:: loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
Christian Heimes90540002008-05-08 14:29:10 +0000268
Nick Coghlanb1615622016-09-10 20:16:18 +1000269 Deserialize *s* (a :class:`str`, :class:`bytes` or :class:`bytearray`
270 instance containing a JSON document) to a Python object using this
271 :ref:`conversion table <json-to-py-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000272
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000273 The other arguments have the same meaning as in :func:`load`, except
274 *encoding* which is ignored and deprecated.
Christian Heimes90540002008-05-08 14:29:10 +0000275
Felix Cruxb4357992013-08-12 17:39:51 -0400276 If the data being deserialized is not a valid JSON document, a
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200277 :exc:`JSONDecodeError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000278
Raymond Hettingera57a8a32017-01-19 21:39:37 -0800279 .. versionchanged:: 3.6
280 *s* can now be of type :class:`bytes` or :class:`bytearray`. The
281 input encoding should be UTF-8, UTF-16 or UTF-32.
282
283
Antoine Pitrou331624b2012-08-24 19:37:23 +0200284Encoders and Decoders
Christian Heimes90540002008-05-08 14:29:10 +0000285---------------------
286
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300287.. class:: JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)
Christian Heimes90540002008-05-08 14:29:10 +0000288
289 Simple JSON decoder.
290
291 Performs the following translations in decoding by default:
292
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200293 .. _json-to-py-table:
294
Christian Heimes90540002008-05-08 14:29:10 +0000295 +---------------+-------------------+
296 | JSON | Python |
297 +===============+===================+
298 | object | dict |
299 +---------------+-------------------+
300 | array | list |
301 +---------------+-------------------+
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000302 | string | str |
Christian Heimes90540002008-05-08 14:29:10 +0000303 +---------------+-------------------+
Georg Brandl639ce962009-04-11 18:18:16 +0000304 | number (int) | int |
Christian Heimes90540002008-05-08 14:29:10 +0000305 +---------------+-------------------+
306 | number (real) | float |
307 +---------------+-------------------+
308 | true | True |
309 +---------------+-------------------+
310 | false | False |
311 +---------------+-------------------+
312 | null | None |
313 +---------------+-------------------+
314
315 It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their
316 corresponding ``float`` values, which is outside the JSON spec.
317
Christian Heimes90540002008-05-08 14:29:10 +0000318 *object_hook*, if specified, will be called with the result of every JSON
319 object decoded and its return value will be used in place of the given
320 :class:`dict`. This can be used to provide custom deserializations (e.g. to
321 support JSON-RPC class hinting).
322
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000323 *object_pairs_hook*, if specified will be called with the result of every
324 JSON object decoded with an ordered list of pairs. The return value of
325 *object_pairs_hook* will be used instead of the :class:`dict`. This
INADA Naoki629338f2018-04-03 12:39:47 +0900326 feature can be used to implement custom decoders. If *object_hook* is also
327 defined, the *object_pairs_hook* takes priority.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000328
329 .. versionchanged:: 3.1
Hirokazu Yamamotoae9eb5c2009-04-26 03:34:06 +0000330 Added support for *object_pairs_hook*.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000331
Christian Heimes90540002008-05-08 14:29:10 +0000332 *parse_float*, if specified, will be called with the string of every JSON
333 float to be decoded. By default, this is equivalent to ``float(num_str)``.
334 This can be used to use another datatype or parser for JSON floats
335 (e.g. :class:`decimal.Decimal`).
336
337 *parse_int*, if specified, will be called with the string of every JSON int
338 to be decoded. By default, this is equivalent to ``int(num_str)``. This can
339 be used to use another datatype or parser for JSON integers
340 (e.g. :class:`float`).
341
342 *parse_constant*, if specified, will be called with one of the following
Serhiy Storchaka022371f2016-11-12 22:47:16 +0200343 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.
344 This can be used to raise an exception if invalid JSON numbers
Christian Heimes90540002008-05-08 14:29:10 +0000345 are encountered.
346
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300347 If *strict* is false (``True`` is the default), then control characters
Georg Brandld4460aa2010-10-15 17:03:02 +0000348 will be allowed inside strings. Control characters in this context are
Serhiy Storchakac7b1a0b2016-11-26 13:43:28 +0200349 those with character codes in the 0--31 range, including ``'\t'`` (tab),
Georg Brandld4460aa2010-10-15 17:03:02 +0000350 ``'\n'``, ``'\r'`` and ``'\0'``.
351
Felix Crux654f0032013-08-12 17:39:51 -0400352 If the data being deserialized is not a valid JSON document, a
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200353 :exc:`JSONDecodeError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000354
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300355 .. versionchanged:: 3.6
356 All parameters are now :ref:`keyword-only <keyword-only_parameter>`.
357
Christian Heimes90540002008-05-08 14:29:10 +0000358 .. method:: decode(s)
359
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000360 Return the Python representation of *s* (a :class:`str` instance
Martin Panterd21e0b52015-10-10 10:36:22 +0000361 containing a JSON document).
Christian Heimes90540002008-05-08 14:29:10 +0000362
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200363 :exc:`JSONDecodeError` will be raised if the given JSON document is not
364 valid.
365
Christian Heimes90540002008-05-08 14:29:10 +0000366 .. method:: raw_decode(s)
367
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000368 Decode a JSON document from *s* (a :class:`str` beginning with a
369 JSON document) and return a 2-tuple of the Python representation
370 and the index in *s* where the document ended.
Christian Heimes90540002008-05-08 14:29:10 +0000371
372 This can be used to decode a JSON document from a string that may have
373 extraneous data at the end.
374
375
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300376.. class:: JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)
Christian Heimes90540002008-05-08 14:29:10 +0000377
378 Extensible JSON encoder for Python data structures.
379
380 Supports the following objects and types by default:
381
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200382 .. _py-to-json-table:
383
Ethan Furmana4998a72013-08-10 13:01:45 -0700384 +----------------------------------------+---------------+
385 | Python | JSON |
386 +========================================+===============+
387 | dict | object |
388 +----------------------------------------+---------------+
389 | list, tuple | array |
390 +----------------------------------------+---------------+
391 | str | string |
392 +----------------------------------------+---------------+
393 | int, float, int- & float-derived Enums | number |
394 +----------------------------------------+---------------+
395 | True | true |
396 +----------------------------------------+---------------+
397 | False | false |
398 +----------------------------------------+---------------+
399 | None | null |
400 +----------------------------------------+---------------+
401
402 .. versionchanged:: 3.4
403 Added support for int- and float-derived Enum classes.
Christian Heimes90540002008-05-08 14:29:10 +0000404
405 To extend this to recognize other objects, subclass and implement a
406 :meth:`default` method with another method that returns a serializable object
407 for ``o`` if possible, otherwise it should call the superclass implementation
408 (to raise :exc:`TypeError`).
409
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300410 If *skipkeys* is false (the default), then it is a :exc:`TypeError` to
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300411 attempt encoding of keys that are not :class:`str`, :class:`int`,
412 :class:`float` or ``None``. If *skipkeys* is true, such items are simply
413 skipped.
Christian Heimes90540002008-05-08 14:29:10 +0000414
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300415 If *ensure_ascii* is true (the default), the output is guaranteed to
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000416 have all incoming non-ASCII characters escaped. If *ensure_ascii* is
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300417 false, these characters will be output as-is.
Christian Heimes90540002008-05-08 14:29:10 +0000418
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300419 If *check_circular* is true (the default), then lists, dicts, and custom
Christian Heimes90540002008-05-08 14:29:10 +0000420 encoded objects will be checked for circular references during encoding to
421 prevent an infinite recursion (which would cause an :exc:`OverflowError`).
422 Otherwise, no such check takes place.
423
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300424 If *allow_nan* is true (the default), then ``NaN``, ``Infinity``, and
Christian Heimes90540002008-05-08 14:29:10 +0000425 ``-Infinity`` will be encoded as such. This behavior is not JSON
426 specification compliant, but is consistent with most JavaScript based
427 encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode
428 such floats.
429
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300430 If *sort_keys* is true (default: ``False``), then the output of dictionaries
Christian Heimes90540002008-05-08 14:29:10 +0000431 will be sorted by key; this is useful for regression tests to ensure that
432 JSON serializations can be compared on a day-to-day basis.
433
Petri Lehtinen72b14262012-08-28 07:08:44 +0300434 If *indent* is a non-negative integer or string, then JSON array elements and
435 object members will be pretty-printed with that indent level. An indent level
436 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default)
437 selects the most compact representation. Using a positive integer indent
438 indents that many spaces per level. If *indent* is a string (such as ``"\t"``),
439 that string is used to indent each level.
440
441 .. versionchanged:: 3.2
442 Allow strings for *indent* in addition to integers.
Christian Heimes90540002008-05-08 14:29:10 +0000443
444 If specified, *separators* should be an ``(item_separator, key_separator)``
Ezio Melotti10031442012-11-29 00:42:56 +0200445 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
446 ``(',', ': ')`` otherwise. To get the most compact JSON representation,
447 you should specify ``(',', ':')`` to eliminate whitespace.
448
449 .. versionchanged:: 3.4
450 Use ``(',', ': ')`` as default if *indent* is not ``None``.
Christian Heimes90540002008-05-08 14:29:10 +0000451
Serhiy Storchaka15287f82016-06-30 13:59:12 +0300452 If specified, *default* should be a function that gets called for objects that
453 can't otherwise be serialized. It should return a JSON encodable version of
454 the object or raise a :exc:`TypeError`. If not specified, :exc:`TypeError`
455 is raised.
Christian Heimes90540002008-05-08 14:29:10 +0000456
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300457 .. versionchanged:: 3.6
458 All parameters are now :ref:`keyword-only <keyword-only_parameter>`.
459
Christian Heimes90540002008-05-08 14:29:10 +0000460
461 .. method:: default(o)
462
463 Implement this method in a subclass such that it returns a serializable
464 object for *o*, or calls the base implementation (to raise a
465 :exc:`TypeError`).
466
467 For example, to support arbitrary iterators, you could implement default
468 like this::
Georg Brandl48310cd2009-01-03 21:18:54 +0000469
Christian Heimes90540002008-05-08 14:29:10 +0000470 def default(self, o):
471 try:
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000472 iterable = iter(o)
Christian Heimes90540002008-05-08 14:29:10 +0000473 except TypeError:
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000474 pass
Christian Heimes90540002008-05-08 14:29:10 +0000475 else:
476 return list(iterable)
R David Murraydd246172013-03-17 21:52:35 -0400477 # Let the base class default method raise the TypeError
Georg Brandl0bb73b82010-09-03 22:36:22 +0000478 return json.JSONEncoder.default(self, o)
Christian Heimes90540002008-05-08 14:29:10 +0000479
480
481 .. method:: encode(o)
482
483 Return a JSON string representation of a Python data structure, *o*. For
484 example::
485
Georg Brandl0bb73b82010-09-03 22:36:22 +0000486 >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
Christian Heimes90540002008-05-08 14:29:10 +0000487 '{"foo": ["bar", "baz"]}'
488
489
490 .. method:: iterencode(o)
491
492 Encode the given object, *o*, and yield each string representation as
493 available. For example::
Georg Brandl48310cd2009-01-03 21:18:54 +0000494
Georg Brandl0bb73b82010-09-03 22:36:22 +0000495 for chunk in json.JSONEncoder().iterencode(bigobject):
Christian Heimes90540002008-05-08 14:29:10 +0000496 mysocket.write(chunk)
Antoine Pitrou331624b2012-08-24 19:37:23 +0200497
498
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200499Exceptions
500----------
501
Serhiy Storchaka5becf382017-05-27 16:11:18 +0300502.. exception:: JSONDecodeError(msg, doc, pos)
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200503
Martin Panteref107ee2017-01-24 00:26:56 +0000504 Subclass of :exc:`ValueError` with the following additional attributes:
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200505
Martin Panteref107ee2017-01-24 00:26:56 +0000506 .. attribute:: msg
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200507
Martin Panteref107ee2017-01-24 00:26:56 +0000508 The unformatted error message.
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200509
Martin Panteref107ee2017-01-24 00:26:56 +0000510 .. attribute:: doc
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200511
Martin Panteref107ee2017-01-24 00:26:56 +0000512 The JSON document being parsed.
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200513
Martin Panteref107ee2017-01-24 00:26:56 +0000514 .. attribute:: pos
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200515
Martin Panteref107ee2017-01-24 00:26:56 +0000516 The start index of *doc* where parsing failed.
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200517
Martin Panteref107ee2017-01-24 00:26:56 +0000518 .. attribute:: lineno
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200519
Martin Panteref107ee2017-01-24 00:26:56 +0000520 The line corresponding to *pos*.
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200521
Martin Panteref107ee2017-01-24 00:26:56 +0000522 .. attribute:: colno
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200523
Martin Panteref107ee2017-01-24 00:26:56 +0000524 The column corresponding to *pos*.
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200525
526 .. versionadded:: 3.5
527
528
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200529Standard Compliance and Interoperability
530----------------------------------------
Antoine Pitrou331624b2012-08-24 19:37:23 +0200531
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200532The JSON format is specified by :rfc:`7159` and by
533`ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_.
534This section details this module's level of compliance with the RFC.
535For simplicity, :class:`JSONEncoder` and :class:`JSONDecoder` subclasses, and
536parameters other than those explicitly mentioned, are not considered.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200537
538This module does not comply with the RFC in a strict fashion, implementing some
539extensions that are valid JavaScript but not valid JSON. In particular:
540
Antoine Pitrou331624b2012-08-24 19:37:23 +0200541- Infinite and NaN number values are accepted and output;
542- Repeated names within an object are accepted, and only the value of the last
543 name-value pair is used.
544
545Since the RFC permits RFC-compliant parsers to accept input texts that are not
546RFC-compliant, this module's deserializer is technically RFC-compliant under
547default settings.
548
549Character Encodings
550^^^^^^^^^^^^^^^^^^^
551
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200552The RFC requires that JSON be represented using either UTF-8, UTF-16, or
553UTF-32, with UTF-8 being the recommended default for maximum interoperability.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200554
555As permitted, though not required, by the RFC, this module's serializer sets
556*ensure_ascii=True* by default, thus escaping the output so that the resulting
557strings only contain ASCII characters.
558
559Other than the *ensure_ascii* parameter, this module is defined strictly in
560terms of conversion between Python objects and
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200561:class:`Unicode strings <str>`, and thus does not otherwise directly address
562the issue of character encodings.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200563
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200564The RFC prohibits adding a byte order mark (BOM) to the start of a JSON text,
565and this module's serializer does not add a BOM to its output.
566The RFC permits, but does not require, JSON deserializers to ignore an initial
567BOM in their input. This module's deserializer raises a :exc:`ValueError`
568when an initial BOM is present.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200569
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200570The RFC does not explicitly forbid JSON strings which contain byte sequences
571that don't correspond to valid Unicode characters (e.g. unpaired UTF-16
572surrogates), but it does note that they may cause interoperability problems.
573By default, this module accepts and outputs (when present in the original
Serhiy Storchakad3faf432015-01-18 11:28:37 +0200574:class:`str`) code points for such sequences.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200575
576
577Infinite and NaN Number Values
578^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
579
580The RFC does not permit the representation of infinite or NaN number values.
581Despite that, by default, this module accepts and outputs ``Infinity``,
582``-Infinity``, and ``NaN`` as if they were valid JSON number literal values::
583
584 >>> # Neither of these calls raises an exception, but the results are not valid JSON
585 >>> json.dumps(float('-inf'))
586 '-Infinity'
587 >>> json.dumps(float('nan'))
588 'NaN'
589 >>> # Same when deserializing
590 >>> json.loads('-Infinity')
591 -inf
592 >>> json.loads('NaN')
593 nan
594
595In the serializer, the *allow_nan* parameter can be used to alter this
596behavior. In the deserializer, the *parse_constant* parameter can be used to
597alter this behavior.
598
599
600Repeated Names Within an Object
601^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
602
603The RFC specifies that the names within a JSON object should be unique, but
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200604does not mandate how repeated names in JSON objects should be handled. By
Antoine Pitrou331624b2012-08-24 19:37:23 +0200605default, this module does not raise an exception; instead, it ignores all but
606the last name-value pair for a given name::
607
608 >>> weird_json = '{"x": 1, "x": 2, "x": 3}'
609 >>> json.loads(weird_json)
610 {'x': 3}
611
612The *object_pairs_hook* parameter can be used to alter this behavior.
Benjamin Peterson940e2072014-03-21 23:17:29 -0500613
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200614
615Top-level Non-Object, Non-Array Values
616^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
617
618The old version of JSON specified by the obsolete :rfc:`4627` required that
619the top-level value of a JSON text must be either a JSON object or array
620(Python :class:`dict` or :class:`list`), and could not be a JSON null,
621boolean, number, or string value. :rfc:`7159` removed that restriction, and
622this module does not and has never implemented that restriction in either its
623serializer or its deserializer.
624
625Regardless, for maximum interoperability, you may wish to voluntarily adhere
626to the restriction yourself.
627
628
629Implementation Limitations
630^^^^^^^^^^^^^^^^^^^^^^^^^^
631
632Some JSON deserializer implementations may set limits on:
633
634* the size of accepted JSON texts
635* the maximum level of nesting of JSON objects and arrays
636* the range and precision of JSON numbers
637* the content and maximum length of JSON strings
638
639This module does not impose any such limits beyond those of the relevant
640Python datatypes themselves or the Python interpreter itself.
641
642When serializing to JSON, beware any such limitations in applications that may
643consume your JSON. In particular, it is common for JSON numbers to be
644deserialized into IEEE 754 double precision numbers and thus subject to that
645representation's range and precision limitations. This is especially relevant
646when serializing Python :class:`int` values of extremely large magnitude, or
647when serializing instances of "exotic" numerical types such as
648:class:`decimal.Decimal`.
649
Benjamin Peterson940e2072014-03-21 23:17:29 -0500650.. highlight:: bash
651
652.. _json-commandline:
653
654Command Line Interface
655----------------------
656
Terry Jan Reedydcb6c882016-06-22 22:46:34 -0400657.. module:: json.tool
658 :synopsis: A command line to validate and pretty-print JSON.
659
660**Source code:** :source:`Lib/json/tool.py`
661
662--------------
663
Benjamin Peterson940e2072014-03-21 23:17:29 -0500664The :mod:`json.tool` module provides a simple command line interface to validate
665and pretty-print JSON objects.
666
Georg Brandl9e7fbde2014-09-21 00:38:13 +0200667If the optional ``infile`` and ``outfile`` arguments are not
Benjamin Peterson940e2072014-03-21 23:17:29 -0500668specified, :attr:`sys.stdin` and :attr:`sys.stdout` will be used respectively::
669
670 $ echo '{"json": "obj"}' | python -m json.tool
671 {
672 "json": "obj"
673 }
674 $ echo '{1.2:3.4}' | python -m json.tool
675 Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
676
Berker Peksag39e4c4d2014-11-10 09:56:54 +0200677.. versionchanged:: 3.5
678 The output is now in the same order as the input. Use the
679 :option:`--sort-keys` option to sort the output of dictionaries
680 alphabetically by key.
Benjamin Peterson940e2072014-03-21 23:17:29 -0500681
682Command line options
683^^^^^^^^^^^^^^^^^^^^
684
Benjamin Petersonfc8e9882014-04-13 19:52:14 -0400685.. cmdoption:: infile
Benjamin Peterson940e2072014-03-21 23:17:29 -0500686
687 The JSON file to be validated or pretty-printed::
688
689 $ python -m json.tool mp_films.json
690 [
691 {
692 "title": "And Now for Something Completely Different",
693 "year": 1971
694 },
695 {
696 "title": "Monty Python and the Holy Grail",
697 "year": 1975
698 }
699 ]
700
Benjamin Petersonfc8e9882014-04-13 19:52:14 -0400701 If *infile* is not specified, read from :attr:`sys.stdin`.
702
703.. cmdoption:: outfile
Benjamin Peterson940e2072014-03-21 23:17:29 -0500704
705 Write the output of the *infile* to the given *outfile*. Otherwise, write it
706 to :attr:`sys.stdout`.
707
Berker Peksag39e4c4d2014-11-10 09:56:54 +0200708.. cmdoption:: --sort-keys
709
710 Sort the output of dictionaries alphabetically by key.
711
712 .. versionadded:: 3.5
713
Benjamin Peterson940e2072014-03-21 23:17:29 -0500714.. cmdoption:: -h, --help
715
716 Show the help message.
Serhiy Storchaka715f01b2014-11-27 19:45:31 +0200717
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200718
719.. rubric:: Footnotes
720
721.. [#rfc-errata] As noted in `the errata for RFC 7159
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300722 <https://www.rfc-editor.org/errata_search.php?rfc=7159>`_,
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200723 JSON permits literal U+2028 (LINE SEPARATOR) and
724 U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript
725 (as of ECMAScript Edition 5.1) does not.