blob: e8c00e8505e9cdb8d1603d6268046162fb066e8b [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
Éric Araujode579d42011-04-21 02:37:41 +020046 >>> 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
105Using 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
138 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
Éric Araujo6f7aa002012-01-16 10:09:20 +0100146 If *ensure_ascii* is ``True`` (the default), the output is guaranteed to
147 have all incoming non-ASCII characters escaped. If *ensure_ascii* is
148 ``False``, these characters will be output as-is.
149
Christian Heimes90540002008-05-08 14:29:10 +0000150 If *check_circular* is ``False`` (default: ``True``), then the circular
151 reference check for container types will be skipped and a circular reference
152 will result in an :exc:`OverflowError` (or worse).
153
154 If *allow_nan* is ``False`` (default: ``True``), then it will be a
155 :exc:`ValueError` to serialize out of range :class:`float` values (``nan``,
156 ``inf``, ``-inf``) in strict compliance of the JSON specification, instead of
157 using the JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
158
Raymond Hettingerb643ef82010-10-31 08:00:16 +0000159 If *indent* is a non-negative integer or string, then JSON array elements and
160 object members will be pretty-printed with that indent level. An indent level
R David Murrayd5315482011-04-12 21:09:18 -0400161 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default)
162 selects the most compact representation. Using a positive integer indent
Petri Lehtinen72c6eef2012-08-27 20:27:30 +0300163 indents that many spaces per level. If *indent* is a string (such as ``"\t"``),
R David Murrayd5315482011-04-12 21:09:18 -0400164 that string is used to indent each level.
Christian Heimes90540002008-05-08 14:29:10 +0000165
Petri Lehtinen72b14262012-08-28 07:08:44 +0300166 .. versionchanged:: 3.2
167 Allow strings for *indent* in addition to integers.
168
Ezio Melotti10031442012-11-29 00:42:56 +0200169 If specified, *separators* should be an ``(item_separator, key_separator)``
170 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
171 ``(',', ': ')`` otherwise. To get the most compact JSON representation,
172 you should specify ``(',', ':')`` to eliminate whitespace.
173
174 .. versionchanged:: 3.4
175 Use ``(',', ': ')`` as default if *indent* is not ``None``.
Christian Heimes90540002008-05-08 14:29:10 +0000176
Christian Heimes90540002008-05-08 14:29:10 +0000177 *default(obj)* is a function that should return a serializable version of
178 *obj* or raise :exc:`TypeError`. The default simply raises :exc:`TypeError`.
179
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200180 If *sort_keys* is ``True`` (default: ``False``), then the output of
181 dictionaries will be sorted by key.
182
Georg Brandl1f01deb2009-01-03 22:47:39 +0000183 To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
Christian Heimes90540002008-05-08 14:29:10 +0000184 :meth:`default` method to serialize additional types), specify it with the
Georg Brandld4460aa2010-10-15 17:03:02 +0000185 *cls* kwarg; otherwise :class:`JSONEncoder` is used.
Christian Heimes90540002008-05-08 14:29:10 +0000186
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300187 .. versionchanged:: 3.6
188 All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`.
Christian Heimes90540002008-05-08 14:29:10 +0000189
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300190
191.. function:: dumps(obj, *, skipkeys=False, ensure_ascii=True, \
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200192 check_circular=True, allow_nan=True, cls=None, \
193 indent=None, separators=None, default=None, \
194 sort_keys=False, **kw)
Christian Heimes90540002008-05-08 14:29:10 +0000195
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200196 Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion
197 table <py-to-json-table>`. The arguments have the same meaning as in
198 :func:`dump`.
Christian Heimes90540002008-05-08 14:29:10 +0000199
Ezio Melotti60adf952011-04-15 07:37:00 +0300200 .. note::
201
Georg Brandl340d2692011-04-16 16:54:15 +0200202 Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol,
203 so trying to serialize multiple objects with repeated calls to
204 :func:`dump` using the same *fp* will result in an invalid JSON file.
205
Senthil Kumaranf2123d22012-03-17 00:40:34 -0700206 .. 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
Terry Jan Reedy9cbcc2f2013-03-08 19:35:15 -0500210 coerced to strings. As a result of this, if a dictionary is converted
Senthil Kumaranf2123d22012-03-17 00:40:34 -0700211 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.
Christian Heimes90540002008-05-08 14:29:10 +0000214
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300215.. 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 +0000216
Antoine Pitrou15251a92012-08-24 19:49:08 +0200217 Deserialize *fp* (a ``.read()``-supporting :term:`file-like object`
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200218 containing a JSON document) to a Python object using this :ref:`conversion
219 table <json-to-py-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000220
Christian Heimes90540002008-05-08 14:29:10 +0000221 *object_hook* is an optional function that will be called with the result of
Benjamin Peterson25c95f12009-05-08 20:42:26 +0000222 any object literal decoded (a :class:`dict`). The return value of
Christian Heimes90540002008-05-08 14:29:10 +0000223 *object_hook* will be used instead of the :class:`dict`. This feature can be used
Antoine Pitrou331624b2012-08-24 19:37:23 +0200224 to implement custom decoders (e.g. `JSON-RPC <http://www.jsonrpc.org>`_
225 class hinting).
Christian Heimes90540002008-05-08 14:29:10 +0000226
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000227 *object_pairs_hook* is an optional function that will be called with the
Benjamin Peterson25c95f12009-05-08 20:42:26 +0000228 result of any object literal decoded with an ordered list of pairs. The
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000229 return value of *object_pairs_hook* will be used instead of the
230 :class:`dict`. This feature can be used to implement custom decoders that
231 rely on the order that the key and value pairs are decoded (for example,
232 :func:`collections.OrderedDict` will remember the order of insertion). If
233 *object_hook* is also defined, the *object_pairs_hook* takes priority.
234
235 .. versionchanged:: 3.1
Hirokazu Yamamotoae9eb5c2009-04-26 03:34:06 +0000236 Added support for *object_pairs_hook*.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000237
Christian Heimes90540002008-05-08 14:29:10 +0000238 *parse_float*, if specified, will be called with the string of every JSON
239 float to be decoded. By default, this is equivalent to ``float(num_str)``.
240 This can be used to use another datatype or parser for JSON floats
241 (e.g. :class:`decimal.Decimal`).
242
243 *parse_int*, if specified, will be called with the string of every JSON int
244 to be decoded. By default, this is equivalent to ``int(num_str)``. This can
245 be used to use another datatype or parser for JSON integers
246 (e.g. :class:`float`).
247
248 *parse_constant*, if specified, will be called with one of the following
Hynek Schlawack9729fd42012-05-16 19:01:04 +0200249 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.
250 This can be used to raise an exception if invalid JSON numbers
Christian Heimes90540002008-05-08 14:29:10 +0000251 are encountered.
252
Hynek Schlawackf54c0602012-05-20 18:32:53 +0200253 .. versionchanged:: 3.1
Hynek Schlawack1203e832012-05-20 12:03:17 +0200254 *parse_constant* doesn't get called on 'null', 'true', 'false' anymore.
255
Christian Heimes90540002008-05-08 14:29:10 +0000256 To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
Georg Brandld4460aa2010-10-15 17:03:02 +0000257 kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments
258 will be passed to the constructor of the class.
Christian Heimes90540002008-05-08 14:29:10 +0000259
Felix Crux60fb9712013-08-12 17:39:51 -0400260 If the data being deserialized is not a valid JSON document, a
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200261 :exc:`JSONDecodeError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000262
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300263 .. versionchanged:: 3.6
264 All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`.
265
266.. 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 +0000267
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000268 Deserialize *s* (a :class:`str` instance containing a JSON document) to a
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200269 Python object using this :ref:`conversion table <json-to-py-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000270
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000271 The other arguments have the same meaning as in :func:`load`, except
272 *encoding* which is ignored and deprecated.
Christian Heimes90540002008-05-08 14:29:10 +0000273
Felix Cruxb4357992013-08-12 17:39:51 -0400274 If the data being deserialized is not a valid JSON document, a
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200275 :exc:`JSONDecodeError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000276
Antoine Pitrou331624b2012-08-24 19:37:23 +0200277Encoders and Decoders
Christian Heimes90540002008-05-08 14:29:10 +0000278---------------------
279
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300280.. 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 +0000281
282 Simple JSON decoder.
283
284 Performs the following translations in decoding by default:
285
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200286 .. _json-to-py-table:
287
Christian Heimes90540002008-05-08 14:29:10 +0000288 +---------------+-------------------+
289 | JSON | Python |
290 +===============+===================+
291 | object | dict |
292 +---------------+-------------------+
293 | array | list |
294 +---------------+-------------------+
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000295 | string | str |
Christian Heimes90540002008-05-08 14:29:10 +0000296 +---------------+-------------------+
Georg Brandl639ce962009-04-11 18:18:16 +0000297 | number (int) | int |
Christian Heimes90540002008-05-08 14:29:10 +0000298 +---------------+-------------------+
299 | number (real) | float |
300 +---------------+-------------------+
301 | true | True |
302 +---------------+-------------------+
303 | false | False |
304 +---------------+-------------------+
305 | null | None |
306 +---------------+-------------------+
307
308 It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their
309 corresponding ``float`` values, which is outside the JSON spec.
310
Christian Heimes90540002008-05-08 14:29:10 +0000311 *object_hook*, if specified, will be called with the result of every JSON
312 object decoded and its return value will be used in place of the given
313 :class:`dict`. This can be used to provide custom deserializations (e.g. to
314 support JSON-RPC class hinting).
315
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000316 *object_pairs_hook*, if specified will be called with the result of every
317 JSON object decoded with an ordered list of pairs. The return value of
318 *object_pairs_hook* will be used instead of the :class:`dict`. This
319 feature can be used to implement custom decoders that rely on the order
320 that the key and value pairs are decoded (for example,
321 :func:`collections.OrderedDict` will remember the order of insertion). If
322 *object_hook* is also defined, the *object_pairs_hook* takes priority.
323
324 .. versionchanged:: 3.1
Hirokazu Yamamotoae9eb5c2009-04-26 03:34:06 +0000325 Added support for *object_pairs_hook*.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000326
Christian Heimes90540002008-05-08 14:29:10 +0000327 *parse_float*, if specified, will be called with the string of every JSON
328 float to be decoded. By default, this is equivalent to ``float(num_str)``.
329 This can be used to use another datatype or parser for JSON floats
330 (e.g. :class:`decimal.Decimal`).
331
332 *parse_int*, if specified, will be called with the string of every JSON int
333 to be decoded. By default, this is equivalent to ``int(num_str)``. This can
334 be used to use another datatype or parser for JSON integers
335 (e.g. :class:`float`).
336
337 *parse_constant*, if specified, will be called with one of the following
338 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``, ``'null'``, ``'true'``,
339 ``'false'``. This can be used to raise an exception if invalid JSON numbers
340 are encountered.
341
Georg Brandld4460aa2010-10-15 17:03:02 +0000342 If *strict* is ``False`` (``True`` is the default), then control characters
343 will be allowed inside strings. Control characters in this context are
344 those with character codes in the 0-31 range, including ``'\t'`` (tab),
345 ``'\n'``, ``'\r'`` and ``'\0'``.
346
Felix Crux654f0032013-08-12 17:39:51 -0400347 If the data being deserialized is not a valid JSON document, a
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200348 :exc:`JSONDecodeError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000349
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300350 .. versionchanged:: 3.6
351 All parameters are now :ref:`keyword-only <keyword-only_parameter>`.
352
Christian Heimes90540002008-05-08 14:29:10 +0000353 .. method:: decode(s)
354
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000355 Return the Python representation of *s* (a :class:`str` instance
Martin Panterd21e0b52015-10-10 10:36:22 +0000356 containing a JSON document).
Christian Heimes90540002008-05-08 14:29:10 +0000357
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200358 :exc:`JSONDecodeError` will be raised if the given JSON document is not
359 valid.
360
Christian Heimes90540002008-05-08 14:29:10 +0000361 .. method:: raw_decode(s)
362
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000363 Decode a JSON document from *s* (a :class:`str` beginning with a
364 JSON document) and return a 2-tuple of the Python representation
365 and the index in *s* where the document ended.
Christian Heimes90540002008-05-08 14:29:10 +0000366
367 This can be used to decode a JSON document from a string that may have
368 extraneous data at the end.
369
370
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300371.. 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 +0000372
373 Extensible JSON encoder for Python data structures.
374
375 Supports the following objects and types by default:
376
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200377 .. _py-to-json-table:
378
Ethan Furmana4998a72013-08-10 13:01:45 -0700379 +----------------------------------------+---------------+
380 | Python | JSON |
381 +========================================+===============+
382 | dict | object |
383 +----------------------------------------+---------------+
384 | list, tuple | array |
385 +----------------------------------------+---------------+
386 | str | string |
387 +----------------------------------------+---------------+
388 | int, float, int- & float-derived Enums | number |
389 +----------------------------------------+---------------+
390 | True | true |
391 +----------------------------------------+---------------+
392 | False | false |
393 +----------------------------------------+---------------+
394 | None | null |
395 +----------------------------------------+---------------+
396
397 .. versionchanged:: 3.4
398 Added support for int- and float-derived Enum classes.
Christian Heimes90540002008-05-08 14:29:10 +0000399
400 To extend this to recognize other objects, subclass and implement a
401 :meth:`default` method with another method that returns a serializable object
402 for ``o`` if possible, otherwise it should call the superclass implementation
403 (to raise :exc:`TypeError`).
404
405 If *skipkeys* is ``False`` (the default), then it is a :exc:`TypeError` to
Georg Brandl639ce962009-04-11 18:18:16 +0000406 attempt encoding of keys that are not str, int, float or None. If
Christian Heimes90540002008-05-08 14:29:10 +0000407 *skipkeys* is ``True``, such items are simply skipped.
408
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000409 If *ensure_ascii* is ``True`` (the default), the output is guaranteed to
410 have all incoming non-ASCII characters escaped. If *ensure_ascii* is
411 ``False``, these characters will be output as-is.
Christian Heimes90540002008-05-08 14:29:10 +0000412
413 If *check_circular* is ``True`` (the default), then lists, dicts, and custom
414 encoded objects will be checked for circular references during encoding to
415 prevent an infinite recursion (which would cause an :exc:`OverflowError`).
416 Otherwise, no such check takes place.
417
418 If *allow_nan* is ``True`` (the default), then ``NaN``, ``Infinity``, and
419 ``-Infinity`` will be encoded as such. This behavior is not JSON
420 specification compliant, but is consistent with most JavaScript based
421 encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode
422 such floats.
423
Georg Brandl6a74da32010-08-22 20:23:38 +0000424 If *sort_keys* is ``True`` (default ``False``), then the output of dictionaries
Christian Heimes90540002008-05-08 14:29:10 +0000425 will be sorted by key; this is useful for regression tests to ensure that
426 JSON serializations can be compared on a day-to-day basis.
427
Petri Lehtinen72b14262012-08-28 07:08:44 +0300428 If *indent* is a non-negative integer or string, then JSON array elements and
429 object members will be pretty-printed with that indent level. An indent level
430 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default)
431 selects the most compact representation. Using a positive integer indent
432 indents that many spaces per level. If *indent* is a string (such as ``"\t"``),
433 that string is used to indent each level.
434
435 .. versionchanged:: 3.2
436 Allow strings for *indent* in addition to integers.
Christian Heimes90540002008-05-08 14:29:10 +0000437
438 If specified, *separators* should be an ``(item_separator, key_separator)``
Ezio Melotti10031442012-11-29 00:42:56 +0200439 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
440 ``(',', ': ')`` otherwise. To get the most compact JSON representation,
441 you should specify ``(',', ':')`` to eliminate whitespace.
442
443 .. versionchanged:: 3.4
444 Use ``(',', ': ')`` as default if *indent* is not ``None``.
Christian Heimes90540002008-05-08 14:29:10 +0000445
446 If specified, *default* is a function that gets called for objects that can't
447 otherwise be serialized. It should return a JSON encodable version of the
448 object or raise a :exc:`TypeError`.
449
Serhiy Storchakaaacd53f2016-06-22 00:03:20 +0300450 .. versionchanged:: 3.6
451 All parameters are now :ref:`keyword-only <keyword-only_parameter>`.
452
Christian Heimes90540002008-05-08 14:29:10 +0000453
454 .. method:: default(o)
455
456 Implement this method in a subclass such that it returns a serializable
457 object for *o*, or calls the base implementation (to raise a
458 :exc:`TypeError`).
459
460 For example, to support arbitrary iterators, you could implement default
461 like this::
Georg Brandl48310cd2009-01-03 21:18:54 +0000462
Christian Heimes90540002008-05-08 14:29:10 +0000463 def default(self, o):
464 try:
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000465 iterable = iter(o)
Christian Heimes90540002008-05-08 14:29:10 +0000466 except TypeError:
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000467 pass
Christian Heimes90540002008-05-08 14:29:10 +0000468 else:
469 return list(iterable)
R David Murraydd246172013-03-17 21:52:35 -0400470 # Let the base class default method raise the TypeError
Georg Brandl0bb73b82010-09-03 22:36:22 +0000471 return json.JSONEncoder.default(self, o)
Christian Heimes90540002008-05-08 14:29:10 +0000472
473
474 .. method:: encode(o)
475
476 Return a JSON string representation of a Python data structure, *o*. For
477 example::
478
Georg Brandl0bb73b82010-09-03 22:36:22 +0000479 >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
Christian Heimes90540002008-05-08 14:29:10 +0000480 '{"foo": ["bar", "baz"]}'
481
482
483 .. method:: iterencode(o)
484
485 Encode the given object, *o*, and yield each string representation as
486 available. For example::
Georg Brandl48310cd2009-01-03 21:18:54 +0000487
Georg Brandl0bb73b82010-09-03 22:36:22 +0000488 for chunk in json.JSONEncoder().iterencode(bigobject):
Christian Heimes90540002008-05-08 14:29:10 +0000489 mysocket.write(chunk)
Antoine Pitrou331624b2012-08-24 19:37:23 +0200490
491
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200492Exceptions
493----------
494
495.. exception:: JSONDecodeError(msg, doc, pos, end=None)
496
497 Subclass of :exc:`ValueError` with the following additional attributes:
498
499 .. attribute:: msg
500
501 The unformatted error message.
502
503 .. attribute:: doc
504
505 The JSON document being parsed.
506
507 .. attribute:: pos
508
509 The start index of *doc* where parsing failed.
510
511 .. attribute:: lineno
512
513 The line corresponding to *pos*.
514
515 .. attribute:: colno
516
517 The column corresponding to *pos*.
518
519 .. versionadded:: 3.5
520
521
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200522Standard Compliance and Interoperability
523----------------------------------------
Antoine Pitrou331624b2012-08-24 19:37:23 +0200524
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200525The JSON format is specified by :rfc:`7159` and by
526`ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_.
527This section details this module's level of compliance with the RFC.
528For simplicity, :class:`JSONEncoder` and :class:`JSONDecoder` subclasses, and
529parameters other than those explicitly mentioned, are not considered.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200530
531This module does not comply with the RFC in a strict fashion, implementing some
532extensions that are valid JavaScript but not valid JSON. In particular:
533
Antoine Pitrou331624b2012-08-24 19:37:23 +0200534- Infinite and NaN number values are accepted and output;
535- Repeated names within an object are accepted, and only the value of the last
536 name-value pair is used.
537
538Since the RFC permits RFC-compliant parsers to accept input texts that are not
539RFC-compliant, this module's deserializer is technically RFC-compliant under
540default settings.
541
542Character Encodings
543^^^^^^^^^^^^^^^^^^^
544
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200545The RFC requires that JSON be represented using either UTF-8, UTF-16, or
546UTF-32, with UTF-8 being the recommended default for maximum interoperability.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200547
548As permitted, though not required, by the RFC, this module's serializer sets
549*ensure_ascii=True* by default, thus escaping the output so that the resulting
550strings only contain ASCII characters.
551
552Other than the *ensure_ascii* parameter, this module is defined strictly in
553terms of conversion between Python objects and
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200554:class:`Unicode strings <str>`, and thus does not otherwise directly address
555the issue of character encodings.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200556
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200557The RFC prohibits adding a byte order mark (BOM) to the start of a JSON text,
558and this module's serializer does not add a BOM to its output.
559The RFC permits, but does not require, JSON deserializers to ignore an initial
560BOM in their input. This module's deserializer raises a :exc:`ValueError`
561when an initial BOM is present.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200562
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200563The RFC does not explicitly forbid JSON strings which contain byte sequences
564that don't correspond to valid Unicode characters (e.g. unpaired UTF-16
565surrogates), but it does note that they may cause interoperability problems.
566By default, this module accepts and outputs (when present in the original
Serhiy Storchakad3faf432015-01-18 11:28:37 +0200567:class:`str`) code points for such sequences.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200568
569
570Infinite and NaN Number Values
571^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
572
573The RFC does not permit the representation of infinite or NaN number values.
574Despite that, by default, this module accepts and outputs ``Infinity``,
575``-Infinity``, and ``NaN`` as if they were valid JSON number literal values::
576
577 >>> # Neither of these calls raises an exception, but the results are not valid JSON
578 >>> json.dumps(float('-inf'))
579 '-Infinity'
580 >>> json.dumps(float('nan'))
581 'NaN'
582 >>> # Same when deserializing
583 >>> json.loads('-Infinity')
584 -inf
585 >>> json.loads('NaN')
586 nan
587
588In the serializer, the *allow_nan* parameter can be used to alter this
589behavior. In the deserializer, the *parse_constant* parameter can be used to
590alter this behavior.
591
592
593Repeated Names Within an Object
594^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
595
596The RFC specifies that the names within a JSON object should be unique, but
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200597does not mandate how repeated names in JSON objects should be handled. By
Antoine Pitrou331624b2012-08-24 19:37:23 +0200598default, this module does not raise an exception; instead, it ignores all but
599the last name-value pair for a given name::
600
601 >>> weird_json = '{"x": 1, "x": 2, "x": 3}'
602 >>> json.loads(weird_json)
603 {'x': 3}
604
605The *object_pairs_hook* parameter can be used to alter this behavior.
Benjamin Peterson940e2072014-03-21 23:17:29 -0500606
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200607
608Top-level Non-Object, Non-Array Values
609^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
610
611The old version of JSON specified by the obsolete :rfc:`4627` required that
612the top-level value of a JSON text must be either a JSON object or array
613(Python :class:`dict` or :class:`list`), and could not be a JSON null,
614boolean, number, or string value. :rfc:`7159` removed that restriction, and
615this module does not and has never implemented that restriction in either its
616serializer or its deserializer.
617
618Regardless, for maximum interoperability, you may wish to voluntarily adhere
619to the restriction yourself.
620
621
622Implementation Limitations
623^^^^^^^^^^^^^^^^^^^^^^^^^^
624
625Some JSON deserializer implementations may set limits on:
626
627* the size of accepted JSON texts
628* the maximum level of nesting of JSON objects and arrays
629* the range and precision of JSON numbers
630* the content and maximum length of JSON strings
631
632This module does not impose any such limits beyond those of the relevant
633Python datatypes themselves or the Python interpreter itself.
634
635When serializing to JSON, beware any such limitations in applications that may
636consume your JSON. In particular, it is common for JSON numbers to be
637deserialized into IEEE 754 double precision numbers and thus subject to that
638representation's range and precision limitations. This is especially relevant
639when serializing Python :class:`int` values of extremely large magnitude, or
640when serializing instances of "exotic" numerical types such as
641:class:`decimal.Decimal`.
642
Benjamin Peterson940e2072014-03-21 23:17:29 -0500643.. highlight:: bash
644
645.. _json-commandline:
646
647Command Line Interface
648----------------------
649
Terry Jan Reedydcb6c882016-06-22 22:46:34 -0400650.. module:: json.tool
651 :synopsis: A command line to validate and pretty-print JSON.
652
653**Source code:** :source:`Lib/json/tool.py`
654
655--------------
656
Benjamin Peterson940e2072014-03-21 23:17:29 -0500657The :mod:`json.tool` module provides a simple command line interface to validate
658and pretty-print JSON objects.
659
Georg Brandl9e7fbde2014-09-21 00:38:13 +0200660If the optional ``infile`` and ``outfile`` arguments are not
Benjamin Peterson940e2072014-03-21 23:17:29 -0500661specified, :attr:`sys.stdin` and :attr:`sys.stdout` will be used respectively::
662
663 $ echo '{"json": "obj"}' | python -m json.tool
664 {
665 "json": "obj"
666 }
667 $ echo '{1.2:3.4}' | python -m json.tool
668 Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
669
Berker Peksag39e4c4d2014-11-10 09:56:54 +0200670.. versionchanged:: 3.5
671 The output is now in the same order as the input. Use the
672 :option:`--sort-keys` option to sort the output of dictionaries
673 alphabetically by key.
Benjamin Peterson940e2072014-03-21 23:17:29 -0500674
675Command line options
676^^^^^^^^^^^^^^^^^^^^
677
Benjamin Petersonfc8e9882014-04-13 19:52:14 -0400678.. cmdoption:: infile
Benjamin Peterson940e2072014-03-21 23:17:29 -0500679
680 The JSON file to be validated or pretty-printed::
681
682 $ python -m json.tool mp_films.json
683 [
684 {
685 "title": "And Now for Something Completely Different",
686 "year": 1971
687 },
688 {
689 "title": "Monty Python and the Holy Grail",
690 "year": 1975
691 }
692 ]
693
Benjamin Petersonfc8e9882014-04-13 19:52:14 -0400694 If *infile* is not specified, read from :attr:`sys.stdin`.
695
696.. cmdoption:: outfile
Benjamin Peterson940e2072014-03-21 23:17:29 -0500697
698 Write the output of the *infile* to the given *outfile*. Otherwise, write it
699 to :attr:`sys.stdout`.
700
Berker Peksag39e4c4d2014-11-10 09:56:54 +0200701.. cmdoption:: --sort-keys
702
703 Sort the output of dictionaries alphabetically by key.
704
705 .. versionadded:: 3.5
706
Benjamin Peterson940e2072014-03-21 23:17:29 -0500707.. cmdoption:: -h, --help
708
709 Show the help message.
Serhiy Storchaka715f01b2014-11-27 19:45:31 +0200710
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200711
712.. rubric:: Footnotes
713
714.. [#rfc-errata] As noted in `the errata for RFC 7159
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300715 <https://www.rfc-editor.org/errata_search.php?rfc=7159>`_,
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200716 JSON permits literal U+2028 (LINE SEPARATOR) and
717 U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript
718 (as of ECMAScript Edition 5.1) does not.