blob: c41b4a35c64ef052f85b05eb1f62dd25b0faf348 [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.
6.. moduleauthor:: Bob Ippolito <bob@redivi.com>
7.. sectionauthor:: Bob Ippolito <bob@redivi.com>
Christian Heimes90540002008-05-08 14:29:10 +00008
Antoine Pitrou331624b2012-08-24 19:37:23 +02009`JSON (JavaScript Object Notation) <http://json.org>`_, specified by
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +020010:rfc:`7159` (which obsoletes :rfc:`4627`) and by
11`ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_,
12is a lightweight data interchange format inspired by
Georg Brandl5d941342016-02-26 19:37:12 +010013`JavaScript <https://en.wikipedia.org/wiki/JavaScript>`_ object literal syntax
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +020014(although it is not a strict subset of JavaScript [#rfc-errata]_ ).
Christian Heimes90540002008-05-08 14:29:10 +000015
16:mod:`json` exposes an API familiar to users of the standard library
17:mod:`marshal` and :mod:`pickle` modules.
18
19Encoding basic Python object hierarchies::
Georg Brandl48310cd2009-01-03 21:18:54 +000020
Christian Heimes90540002008-05-08 14:29:10 +000021 >>> import json
22 >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
23 '["foo", {"bar": ["baz", null, 1.0, 2]}]'
Neal Norwitz752abd02008-05-13 04:55:24 +000024 >>> print(json.dumps("\"foo\bar"))
Christian Heimes90540002008-05-08 14:29:10 +000025 "\"foo\bar"
Benjamin Peterson2505bc62008-05-15 02:17:58 +000026 >>> print(json.dumps('\u1234'))
Christian Heimes90540002008-05-08 14:29:10 +000027 "\u1234"
Neal Norwitz752abd02008-05-13 04:55:24 +000028 >>> print(json.dumps('\\'))
Christian Heimes90540002008-05-08 14:29:10 +000029 "\\"
Neal Norwitz752abd02008-05-13 04:55:24 +000030 >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
Christian Heimes90540002008-05-08 14:29:10 +000031 {"a": 0, "b": 0, "c": 0}
Benjamin Peterson2505bc62008-05-15 02:17:58 +000032 >>> from io import StringIO
Christian Heimes90540002008-05-08 14:29:10 +000033 >>> io = StringIO()
34 >>> json.dump(['streaming API'], io)
35 >>> io.getvalue()
36 '["streaming API"]'
37
38Compact encoding::
39
40 >>> import json
Éric Araujode579d42011-04-21 02:37:41 +020041 >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',', ':'))
Christian Heimes90540002008-05-08 14:29:10 +000042 '[1,2,3,{"4":5,"6":7}]'
43
44Pretty printing::
45
46 >>> import json
Neal Norwitz752abd02008-05-13 04:55:24 +000047 >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
Christian Heimes90540002008-05-08 14:29:10 +000048 {
Georg Brandl48310cd2009-01-03 21:18:54 +000049 "4": 5,
Christian Heimes90540002008-05-08 14:29:10 +000050 "6": 7
51 }
52
53Decoding JSON::
Georg Brandl48310cd2009-01-03 21:18:54 +000054
Christian Heimes90540002008-05-08 14:29:10 +000055 >>> import json
56 >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
Benjamin Peterson2505bc62008-05-15 02:17:58 +000057 ['foo', {'bar': ['baz', None, 1.0, 2]}]
Christian Heimes90540002008-05-08 14:29:10 +000058 >>> json.loads('"\\"foo\\bar"')
Benjamin Peterson2505bc62008-05-15 02:17:58 +000059 '"foo\x08ar'
60 >>> from io import StringIO
Christian Heimes90540002008-05-08 14:29:10 +000061 >>> io = StringIO('["streaming API"]')
62 >>> json.load(io)
Benjamin Peterson2505bc62008-05-15 02:17:58 +000063 ['streaming API']
Christian Heimes90540002008-05-08 14:29:10 +000064
65Specializing JSON object decoding::
66
67 >>> import json
68 >>> def as_complex(dct):
69 ... if '__complex__' in dct:
70 ... return complex(dct['real'], dct['imag'])
71 ... return dct
Benjamin Peterson2505bc62008-05-15 02:17:58 +000072 ...
Christian Heimes90540002008-05-08 14:29:10 +000073 >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
74 ... object_hook=as_complex)
75 (1+2j)
76 >>> import decimal
77 >>> json.loads('1.1', parse_float=decimal.Decimal)
78 Decimal('1.1')
79
80Extending :class:`JSONEncoder`::
Georg Brandl48310cd2009-01-03 21:18:54 +000081
Christian Heimes90540002008-05-08 14:29:10 +000082 >>> import json
83 >>> class ComplexEncoder(json.JSONEncoder):
84 ... def default(self, obj):
85 ... if isinstance(obj, complex):
86 ... return [obj.real, obj.imag]
R David Murraydd246172013-03-17 21:52:35 -040087 ... # Let the base class default method raise the TypeError
Christian Heimes90540002008-05-08 14:29:10 +000088 ... return json.JSONEncoder.default(self, obj)
Benjamin Peterson2505bc62008-05-15 02:17:58 +000089 ...
Georg Brandl0bb73b82010-09-03 22:36:22 +000090 >>> json.dumps(2 + 1j, cls=ComplexEncoder)
Christian Heimes90540002008-05-08 14:29:10 +000091 '[2.0, 1.0]'
92 >>> ComplexEncoder().encode(2 + 1j)
93 '[2.0, 1.0]'
94 >>> list(ComplexEncoder().iterencode(2 + 1j))
Georg Brandl0bb73b82010-09-03 22:36:22 +000095 ['[2.0', ', 1.0', ']']
Georg Brandl48310cd2009-01-03 21:18:54 +000096
Christian Heimes90540002008-05-08 14:29:10 +000097
Ezio Melotti84e59aa2012-04-13 21:02:18 -060098.. highlight:: bash
Christian Heimes90540002008-05-08 14:29:10 +000099
100Using json.tool from the shell to validate and pretty-print::
Georg Brandl48310cd2009-01-03 21:18:54 +0000101
Georg Brandl946faa32014-10-28 22:54:24 +0100102 $ echo '{"json":"obj"}' | python -m json.tool
Christian Heimes90540002008-05-08 14:29:10 +0000103 {
104 "json": "obj"
105 }
Georg Brandl946faa32014-10-28 22:54:24 +0100106 $ echo '{1.2:3.4}' | python -m json.tool
Serhiy Storchakac510a042013-02-21 20:19:16 +0200107 Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Christian Heimes90540002008-05-08 14:29:10 +0000108
Benjamin Peterson940e2072014-03-21 23:17:29 -0500109See :ref:`json-commandline` for detailed documentation.
110
Ezio Melotti84e59aa2012-04-13 21:02:18 -0600111.. highlight:: python3
Christian Heimes90540002008-05-08 14:29:10 +0000112
Georg Brandl48310cd2009-01-03 21:18:54 +0000113.. note::
Christian Heimes90540002008-05-08 14:29:10 +0000114
Antoine Pitrou331624b2012-08-24 19:37:23 +0200115 JSON is a subset of `YAML <http://yaml.org/>`_ 1.2. The JSON produced by
116 this module's default settings (in particular, the default *separators*
117 value) is also a subset of YAML 1.0 and 1.1. This module can thus also be
118 used as a YAML serializer.
Christian Heimes90540002008-05-08 14:29:10 +0000119
120
121Basic Usage
122-----------
123
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200124.. function:: dump(obj, fp, skipkeys=False, ensure_ascii=True, \
125 check_circular=True, allow_nan=True, cls=None, \
126 indent=None, separators=None, default=None, \
127 sort_keys=False, **kw)
Christian Heimes90540002008-05-08 14:29:10 +0000128
129 Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200130 :term:`file-like object`) using this :ref:`conversion table
131 <py-to-json-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000132
133 If *skipkeys* is ``True`` (default: ``False``), then dict keys that are not
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000134 of a basic type (:class:`str`, :class:`int`, :class:`float`, :class:`bool`,
135 ``None``) will be skipped instead of raising a :exc:`TypeError`.
Christian Heimes90540002008-05-08 14:29:10 +0000136
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000137 The :mod:`json` module always produces :class:`str` objects, not
138 :class:`bytes` objects. Therefore, ``fp.write()`` must support :class:`str`
139 input.
140
Éric Araujo6f7aa002012-01-16 10:09:20 +0100141 If *ensure_ascii* is ``True`` (the default), the output is guaranteed to
142 have all incoming non-ASCII characters escaped. If *ensure_ascii* is
143 ``False``, these characters will be output as-is.
144
Christian Heimes90540002008-05-08 14:29:10 +0000145 If *check_circular* is ``False`` (default: ``True``), then the circular
146 reference check for container types will be skipped and a circular reference
147 will result in an :exc:`OverflowError` (or worse).
148
149 If *allow_nan* is ``False`` (default: ``True``), then it will be a
150 :exc:`ValueError` to serialize out of range :class:`float` values (``nan``,
151 ``inf``, ``-inf``) in strict compliance of the JSON specification, instead of
152 using the JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
153
Raymond Hettingerb643ef82010-10-31 08:00:16 +0000154 If *indent* is a non-negative integer or string, then JSON array elements and
155 object members will be pretty-printed with that indent level. An indent level
R David Murrayd5315482011-04-12 21:09:18 -0400156 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default)
157 selects the most compact representation. Using a positive integer indent
Petri Lehtinen72c6eef2012-08-27 20:27:30 +0300158 indents that many spaces per level. If *indent* is a string (such as ``"\t"``),
R David Murrayd5315482011-04-12 21:09:18 -0400159 that string is used to indent each level.
Christian Heimes90540002008-05-08 14:29:10 +0000160
Petri Lehtinen72b14262012-08-28 07:08:44 +0300161 .. versionchanged:: 3.2
162 Allow strings for *indent* in addition to integers.
163
Ezio Melotti10031442012-11-29 00:42:56 +0200164 If specified, *separators* should be an ``(item_separator, key_separator)``
165 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
166 ``(',', ': ')`` otherwise. To get the most compact JSON representation,
167 you should specify ``(',', ':')`` to eliminate whitespace.
168
169 .. versionchanged:: 3.4
170 Use ``(',', ': ')`` as default if *indent* is not ``None``.
Christian Heimes90540002008-05-08 14:29:10 +0000171
Christian Heimes90540002008-05-08 14:29:10 +0000172 *default(obj)* is a function that should return a serializable version of
173 *obj* or raise :exc:`TypeError`. The default simply raises :exc:`TypeError`.
174
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200175 If *sort_keys* is ``True`` (default: ``False``), then the output of
176 dictionaries will be sorted by key.
177
Georg Brandl1f01deb2009-01-03 22:47:39 +0000178 To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
Christian Heimes90540002008-05-08 14:29:10 +0000179 :meth:`default` method to serialize additional types), specify it with the
Georg Brandld4460aa2010-10-15 17:03:02 +0000180 *cls* kwarg; otherwise :class:`JSONEncoder` is used.
Christian Heimes90540002008-05-08 14:29:10 +0000181
182
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200183.. function:: dumps(obj, skipkeys=False, ensure_ascii=True, \
184 check_circular=True, allow_nan=True, cls=None, \
185 indent=None, separators=None, default=None, \
186 sort_keys=False, **kw)
Christian Heimes90540002008-05-08 14:29:10 +0000187
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200188 Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion
189 table <py-to-json-table>`. The arguments have the same meaning as in
190 :func:`dump`.
Christian Heimes90540002008-05-08 14:29:10 +0000191
Ezio Melotti60adf952011-04-15 07:37:00 +0300192 .. note::
193
Georg Brandl340d2692011-04-16 16:54:15 +0200194 Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol,
195 so trying to serialize multiple objects with repeated calls to
196 :func:`dump` using the same *fp* will result in an invalid JSON file.
197
Senthil Kumaranf2123d22012-03-17 00:40:34 -0700198 .. note::
199
200 Keys in key/value pairs of JSON are always of the type :class:`str`. When
201 a dictionary is converted into JSON, all the keys of the dictionary are
Terry Jan Reedy9cbcc2f2013-03-08 19:35:15 -0500202 coerced to strings. As a result of this, if a dictionary is converted
Senthil Kumaranf2123d22012-03-17 00:40:34 -0700203 into JSON and then back into a dictionary, the dictionary may not equal
204 the original one. That is, ``loads(dumps(x)) != x`` if x has non-string
205 keys.
Christian Heimes90540002008-05-08 14:29:10 +0000206
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000207.. 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 +0000208
Antoine Pitrou15251a92012-08-24 19:49:08 +0200209 Deserialize *fp* (a ``.read()``-supporting :term:`file-like object`
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200210 containing a JSON document) to a Python object using this :ref:`conversion
211 table <json-to-py-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000212
Christian Heimes90540002008-05-08 14:29:10 +0000213 *object_hook* is an optional function that will be called with the result of
Benjamin Peterson25c95f12009-05-08 20:42:26 +0000214 any object literal decoded (a :class:`dict`). The return value of
Christian Heimes90540002008-05-08 14:29:10 +0000215 *object_hook* will be used instead of the :class:`dict`. This feature can be used
Antoine Pitrou331624b2012-08-24 19:37:23 +0200216 to implement custom decoders (e.g. `JSON-RPC <http://www.jsonrpc.org>`_
217 class hinting).
Christian Heimes90540002008-05-08 14:29:10 +0000218
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000219 *object_pairs_hook* is an optional function that will be called with the
Benjamin Peterson25c95f12009-05-08 20:42:26 +0000220 result of any object literal decoded with an ordered list of pairs. The
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000221 return value of *object_pairs_hook* will be used instead of the
222 :class:`dict`. This feature can be used to implement custom decoders that
223 rely on the order that the key and value pairs are decoded (for example,
224 :func:`collections.OrderedDict` will remember the order of insertion). If
225 *object_hook* is also defined, the *object_pairs_hook* takes priority.
226
227 .. versionchanged:: 3.1
Hirokazu Yamamotoae9eb5c2009-04-26 03:34:06 +0000228 Added support for *object_pairs_hook*.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000229
Christian Heimes90540002008-05-08 14:29:10 +0000230 *parse_float*, if specified, will be called with the string of every JSON
231 float to be decoded. By default, this is equivalent to ``float(num_str)``.
232 This can be used to use another datatype or parser for JSON floats
233 (e.g. :class:`decimal.Decimal`).
234
235 *parse_int*, if specified, will be called with the string of every JSON int
236 to be decoded. By default, this is equivalent to ``int(num_str)``. This can
237 be used to use another datatype or parser for JSON integers
238 (e.g. :class:`float`).
239
240 *parse_constant*, if specified, will be called with one of the following
Hynek Schlawack9729fd42012-05-16 19:01:04 +0200241 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.
242 This can be used to raise an exception if invalid JSON numbers
Christian Heimes90540002008-05-08 14:29:10 +0000243 are encountered.
244
Hynek Schlawackf54c0602012-05-20 18:32:53 +0200245 .. versionchanged:: 3.1
Hynek Schlawack1203e832012-05-20 12:03:17 +0200246 *parse_constant* doesn't get called on 'null', 'true', 'false' anymore.
247
Christian Heimes90540002008-05-08 14:29:10 +0000248 To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
Georg Brandld4460aa2010-10-15 17:03:02 +0000249 kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments
250 will be passed to the constructor of the class.
Christian Heimes90540002008-05-08 14:29:10 +0000251
Felix Crux60fb9712013-08-12 17:39:51 -0400252 If the data being deserialized is not a valid JSON document, a
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200253 :exc:`JSONDecodeError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000254
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000255.. 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 +0000256
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000257 Deserialize *s* (a :class:`str` instance containing a JSON document) to a
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200258 Python object using this :ref:`conversion table <json-to-py-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000259
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000260 The other arguments have the same meaning as in :func:`load`, except
261 *encoding* which is ignored and deprecated.
Christian Heimes90540002008-05-08 14:29:10 +0000262
Felix Cruxb4357992013-08-12 17:39:51 -0400263 If the data being deserialized is not a valid JSON document, a
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200264 :exc:`JSONDecodeError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000265
Antoine Pitrou331624b2012-08-24 19:37:23 +0200266Encoders and Decoders
Christian Heimes90540002008-05-08 14:29:10 +0000267---------------------
268
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000269.. 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 +0000270
271 Simple JSON decoder.
272
273 Performs the following translations in decoding by default:
274
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200275 .. _json-to-py-table:
276
Christian Heimes90540002008-05-08 14:29:10 +0000277 +---------------+-------------------+
278 | JSON | Python |
279 +===============+===================+
280 | object | dict |
281 +---------------+-------------------+
282 | array | list |
283 +---------------+-------------------+
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000284 | string | str |
Christian Heimes90540002008-05-08 14:29:10 +0000285 +---------------+-------------------+
Georg Brandl639ce962009-04-11 18:18:16 +0000286 | number (int) | int |
Christian Heimes90540002008-05-08 14:29:10 +0000287 +---------------+-------------------+
288 | number (real) | float |
289 +---------------+-------------------+
290 | true | True |
291 +---------------+-------------------+
292 | false | False |
293 +---------------+-------------------+
294 | null | None |
295 +---------------+-------------------+
296
297 It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their
298 corresponding ``float`` values, which is outside the JSON spec.
299
Christian Heimes90540002008-05-08 14:29:10 +0000300 *object_hook*, if specified, will be called with the result of every JSON
301 object decoded and its return value will be used in place of the given
302 :class:`dict`. This can be used to provide custom deserializations (e.g. to
303 support JSON-RPC class hinting).
304
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000305 *object_pairs_hook*, if specified will be called with the result of every
306 JSON object decoded with an ordered list of pairs. The return value of
307 *object_pairs_hook* will be used instead of the :class:`dict`. This
308 feature can be used to implement custom decoders that rely on the order
309 that the key and value pairs are decoded (for example,
310 :func:`collections.OrderedDict` will remember the order of insertion). If
311 *object_hook* is also defined, the *object_pairs_hook* takes priority.
312
313 .. versionchanged:: 3.1
Hirokazu Yamamotoae9eb5c2009-04-26 03:34:06 +0000314 Added support for *object_pairs_hook*.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000315
Christian Heimes90540002008-05-08 14:29:10 +0000316 *parse_float*, if specified, will be called with the string of every JSON
317 float to be decoded. By default, this is equivalent to ``float(num_str)``.
318 This can be used to use another datatype or parser for JSON floats
319 (e.g. :class:`decimal.Decimal`).
320
321 *parse_int*, if specified, will be called with the string of every JSON int
322 to be decoded. By default, this is equivalent to ``int(num_str)``. This can
323 be used to use another datatype or parser for JSON integers
324 (e.g. :class:`float`).
325
326 *parse_constant*, if specified, will be called with one of the following
327 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``, ``'null'``, ``'true'``,
328 ``'false'``. This can be used to raise an exception if invalid JSON numbers
329 are encountered.
330
Georg Brandld4460aa2010-10-15 17:03:02 +0000331 If *strict* is ``False`` (``True`` is the default), then control characters
332 will be allowed inside strings. Control characters in this context are
333 those with character codes in the 0-31 range, including ``'\t'`` (tab),
334 ``'\n'``, ``'\r'`` and ``'\0'``.
335
Felix Crux654f0032013-08-12 17:39:51 -0400336 If the data being deserialized is not a valid JSON document, a
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200337 :exc:`JSONDecodeError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000338
339 .. method:: decode(s)
340
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000341 Return the Python representation of *s* (a :class:`str` instance
Martin Panterd21e0b52015-10-10 10:36:22 +0000342 containing a JSON document).
Christian Heimes90540002008-05-08 14:29:10 +0000343
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200344 :exc:`JSONDecodeError` will be raised if the given JSON document is not
345 valid.
346
Christian Heimes90540002008-05-08 14:29:10 +0000347 .. method:: raw_decode(s)
348
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000349 Decode a JSON document from *s* (a :class:`str` beginning with a
350 JSON document) and return a 2-tuple of the Python representation
351 and the index in *s* where the document ended.
Christian Heimes90540002008-05-08 14:29:10 +0000352
353 This can be used to decode a JSON document from a string that may have
354 extraneous data at the end.
355
356
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000357.. 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 +0000358
359 Extensible JSON encoder for Python data structures.
360
361 Supports the following objects and types by default:
362
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200363 .. _py-to-json-table:
364
Ethan Furmana4998a72013-08-10 13:01:45 -0700365 +----------------------------------------+---------------+
366 | Python | JSON |
367 +========================================+===============+
368 | dict | object |
369 +----------------------------------------+---------------+
370 | list, tuple | array |
371 +----------------------------------------+---------------+
372 | str | string |
373 +----------------------------------------+---------------+
374 | int, float, int- & float-derived Enums | number |
375 +----------------------------------------+---------------+
376 | True | true |
377 +----------------------------------------+---------------+
378 | False | false |
379 +----------------------------------------+---------------+
380 | None | null |
381 +----------------------------------------+---------------+
382
383 .. versionchanged:: 3.4
384 Added support for int- and float-derived Enum classes.
Christian Heimes90540002008-05-08 14:29:10 +0000385
386 To extend this to recognize other objects, subclass and implement a
387 :meth:`default` method with another method that returns a serializable object
388 for ``o`` if possible, otherwise it should call the superclass implementation
389 (to raise :exc:`TypeError`).
390
391 If *skipkeys* is ``False`` (the default), then it is a :exc:`TypeError` to
Georg Brandl639ce962009-04-11 18:18:16 +0000392 attempt encoding of keys that are not str, int, float or None. If
Christian Heimes90540002008-05-08 14:29:10 +0000393 *skipkeys* is ``True``, such items are simply skipped.
394
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000395 If *ensure_ascii* is ``True`` (the default), the output is guaranteed to
396 have all incoming non-ASCII characters escaped. If *ensure_ascii* is
397 ``False``, these characters will be output as-is.
Christian Heimes90540002008-05-08 14:29:10 +0000398
399 If *check_circular* is ``True`` (the default), then lists, dicts, and custom
400 encoded objects will be checked for circular references during encoding to
401 prevent an infinite recursion (which would cause an :exc:`OverflowError`).
402 Otherwise, no such check takes place.
403
404 If *allow_nan* is ``True`` (the default), then ``NaN``, ``Infinity``, and
405 ``-Infinity`` will be encoded as such. This behavior is not JSON
406 specification compliant, but is consistent with most JavaScript based
407 encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode
408 such floats.
409
Georg Brandl6a74da32010-08-22 20:23:38 +0000410 If *sort_keys* is ``True`` (default ``False``), then the output of dictionaries
Christian Heimes90540002008-05-08 14:29:10 +0000411 will be sorted by key; this is useful for regression tests to ensure that
412 JSON serializations can be compared on a day-to-day basis.
413
Petri Lehtinen72b14262012-08-28 07:08:44 +0300414 If *indent* is a non-negative integer or string, then JSON array elements and
415 object members will be pretty-printed with that indent level. An indent level
416 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default)
417 selects the most compact representation. Using a positive integer indent
418 indents that many spaces per level. If *indent* is a string (such as ``"\t"``),
419 that string is used to indent each level.
420
421 .. versionchanged:: 3.2
422 Allow strings for *indent* in addition to integers.
Christian Heimes90540002008-05-08 14:29:10 +0000423
424 If specified, *separators* should be an ``(item_separator, key_separator)``
Ezio Melotti10031442012-11-29 00:42:56 +0200425 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
426 ``(',', ': ')`` otherwise. To get the most compact JSON representation,
427 you should specify ``(',', ':')`` to eliminate whitespace.
428
429 .. versionchanged:: 3.4
430 Use ``(',', ': ')`` as default if *indent* is not ``None``.
Christian Heimes90540002008-05-08 14:29:10 +0000431
432 If specified, *default* is a function that gets called for objects that can't
433 otherwise be serialized. It should return a JSON encodable version of the
434 object or raise a :exc:`TypeError`.
435
Christian Heimes90540002008-05-08 14:29:10 +0000436
437 .. method:: default(o)
438
439 Implement this method in a subclass such that it returns a serializable
440 object for *o*, or calls the base implementation (to raise a
441 :exc:`TypeError`).
442
443 For example, to support arbitrary iterators, you could implement default
444 like this::
Georg Brandl48310cd2009-01-03 21:18:54 +0000445
Christian Heimes90540002008-05-08 14:29:10 +0000446 def default(self, o):
447 try:
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000448 iterable = iter(o)
Christian Heimes90540002008-05-08 14:29:10 +0000449 except TypeError:
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000450 pass
Christian Heimes90540002008-05-08 14:29:10 +0000451 else:
452 return list(iterable)
R David Murraydd246172013-03-17 21:52:35 -0400453 # Let the base class default method raise the TypeError
Georg Brandl0bb73b82010-09-03 22:36:22 +0000454 return json.JSONEncoder.default(self, o)
Christian Heimes90540002008-05-08 14:29:10 +0000455
456
457 .. method:: encode(o)
458
459 Return a JSON string representation of a Python data structure, *o*. For
460 example::
461
Georg Brandl0bb73b82010-09-03 22:36:22 +0000462 >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
Christian Heimes90540002008-05-08 14:29:10 +0000463 '{"foo": ["bar", "baz"]}'
464
465
466 .. method:: iterencode(o)
467
468 Encode the given object, *o*, and yield each string representation as
469 available. For example::
Georg Brandl48310cd2009-01-03 21:18:54 +0000470
Georg Brandl0bb73b82010-09-03 22:36:22 +0000471 for chunk in json.JSONEncoder().iterencode(bigobject):
Christian Heimes90540002008-05-08 14:29:10 +0000472 mysocket.write(chunk)
Antoine Pitrou331624b2012-08-24 19:37:23 +0200473
474
Serhiy Storchaka47efb4a2015-01-26 13:16:30 +0200475Exceptions
476----------
477
478.. exception:: JSONDecodeError(msg, doc, pos, end=None)
479
480 Subclass of :exc:`ValueError` with the following additional attributes:
481
482 .. attribute:: msg
483
484 The unformatted error message.
485
486 .. attribute:: doc
487
488 The JSON document being parsed.
489
490 .. attribute:: pos
491
492 The start index of *doc* where parsing failed.
493
494 .. attribute:: lineno
495
496 The line corresponding to *pos*.
497
498 .. attribute:: colno
499
500 The column corresponding to *pos*.
501
502 .. versionadded:: 3.5
503
504
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200505Standard Compliance and Interoperability
506----------------------------------------
Antoine Pitrou331624b2012-08-24 19:37:23 +0200507
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200508The JSON format is specified by :rfc:`7159` and by
509`ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_.
510This section details this module's level of compliance with the RFC.
511For simplicity, :class:`JSONEncoder` and :class:`JSONDecoder` subclasses, and
512parameters other than those explicitly mentioned, are not considered.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200513
514This module does not comply with the RFC in a strict fashion, implementing some
515extensions that are valid JavaScript but not valid JSON. In particular:
516
Antoine Pitrou331624b2012-08-24 19:37:23 +0200517- Infinite and NaN number values are accepted and output;
518- Repeated names within an object are accepted, and only the value of the last
519 name-value pair is used.
520
521Since the RFC permits RFC-compliant parsers to accept input texts that are not
522RFC-compliant, this module's deserializer is technically RFC-compliant under
523default settings.
524
525Character Encodings
526^^^^^^^^^^^^^^^^^^^
527
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200528The RFC requires that JSON be represented using either UTF-8, UTF-16, or
529UTF-32, with UTF-8 being the recommended default for maximum interoperability.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200530
531As permitted, though not required, by the RFC, this module's serializer sets
532*ensure_ascii=True* by default, thus escaping the output so that the resulting
533strings only contain ASCII characters.
534
535Other than the *ensure_ascii* parameter, this module is defined strictly in
536terms of conversion between Python objects and
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200537:class:`Unicode strings <str>`, and thus does not otherwise directly address
538the issue of character encodings.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200539
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200540The RFC prohibits adding a byte order mark (BOM) to the start of a JSON text,
541and this module's serializer does not add a BOM to its output.
542The RFC permits, but does not require, JSON deserializers to ignore an initial
543BOM in their input. This module's deserializer raises a :exc:`ValueError`
544when an initial BOM is present.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200545
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200546The RFC does not explicitly forbid JSON strings which contain byte sequences
547that don't correspond to valid Unicode characters (e.g. unpaired UTF-16
548surrogates), but it does note that they may cause interoperability problems.
549By default, this module accepts and outputs (when present in the original
Serhiy Storchakad3faf432015-01-18 11:28:37 +0200550:class:`str`) code points for such sequences.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200551
552
553Infinite and NaN Number Values
554^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
555
556The RFC does not permit the representation of infinite or NaN number values.
557Despite that, by default, this module accepts and outputs ``Infinity``,
558``-Infinity``, and ``NaN`` as if they were valid JSON number literal values::
559
560 >>> # Neither of these calls raises an exception, but the results are not valid JSON
561 >>> json.dumps(float('-inf'))
562 '-Infinity'
563 >>> json.dumps(float('nan'))
564 'NaN'
565 >>> # Same when deserializing
566 >>> json.loads('-Infinity')
567 -inf
568 >>> json.loads('NaN')
569 nan
570
571In the serializer, the *allow_nan* parameter can be used to alter this
572behavior. In the deserializer, the *parse_constant* parameter can be used to
573alter this behavior.
574
575
576Repeated Names Within an Object
577^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
578
579The RFC specifies that the names within a JSON object should be unique, but
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200580does not mandate how repeated names in JSON objects should be handled. By
Antoine Pitrou331624b2012-08-24 19:37:23 +0200581default, this module does not raise an exception; instead, it ignores all but
582the last name-value pair for a given name::
583
584 >>> weird_json = '{"x": 1, "x": 2, "x": 3}'
585 >>> json.loads(weird_json)
586 {'x': 3}
587
588The *object_pairs_hook* parameter can be used to alter this behavior.
Benjamin Peterson940e2072014-03-21 23:17:29 -0500589
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200590
591Top-level Non-Object, Non-Array Values
592^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
593
594The old version of JSON specified by the obsolete :rfc:`4627` required that
595the top-level value of a JSON text must be either a JSON object or array
596(Python :class:`dict` or :class:`list`), and could not be a JSON null,
597boolean, number, or string value. :rfc:`7159` removed that restriction, and
598this module does not and has never implemented that restriction in either its
599serializer or its deserializer.
600
601Regardless, for maximum interoperability, you may wish to voluntarily adhere
602to the restriction yourself.
603
604
605Implementation Limitations
606^^^^^^^^^^^^^^^^^^^^^^^^^^
607
608Some JSON deserializer implementations may set limits on:
609
610* the size of accepted JSON texts
611* the maximum level of nesting of JSON objects and arrays
612* the range and precision of JSON numbers
613* the content and maximum length of JSON strings
614
615This module does not impose any such limits beyond those of the relevant
616Python datatypes themselves or the Python interpreter itself.
617
618When serializing to JSON, beware any such limitations in applications that may
619consume your JSON. In particular, it is common for JSON numbers to be
620deserialized into IEEE 754 double precision numbers and thus subject to that
621representation's range and precision limitations. This is especially relevant
622when serializing Python :class:`int` values of extremely large magnitude, or
623when serializing instances of "exotic" numerical types such as
624:class:`decimal.Decimal`.
625
Benjamin Peterson940e2072014-03-21 23:17:29 -0500626.. highlight:: bash
Berker Peksag39e4c4d2014-11-10 09:56:54 +0200627.. module:: json.tool
Benjamin Peterson940e2072014-03-21 23:17:29 -0500628
629.. _json-commandline:
630
631Command Line Interface
632----------------------
633
634The :mod:`json.tool` module provides a simple command line interface to validate
635and pretty-print JSON objects.
636
Georg Brandl9e7fbde2014-09-21 00:38:13 +0200637If the optional ``infile`` and ``outfile`` arguments are not
Benjamin Peterson940e2072014-03-21 23:17:29 -0500638specified, :attr:`sys.stdin` and :attr:`sys.stdout` will be used respectively::
639
640 $ echo '{"json": "obj"}' | python -m json.tool
641 {
642 "json": "obj"
643 }
644 $ echo '{1.2:3.4}' | python -m json.tool
645 Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
646
Berker Peksag39e4c4d2014-11-10 09:56:54 +0200647.. versionchanged:: 3.5
648 The output is now in the same order as the input. Use the
649 :option:`--sort-keys` option to sort the output of dictionaries
650 alphabetically by key.
Benjamin Peterson940e2072014-03-21 23:17:29 -0500651
652Command line options
653^^^^^^^^^^^^^^^^^^^^
654
Benjamin Petersonfc8e9882014-04-13 19:52:14 -0400655.. cmdoption:: infile
Benjamin Peterson940e2072014-03-21 23:17:29 -0500656
657 The JSON file to be validated or pretty-printed::
658
659 $ python -m json.tool mp_films.json
660 [
661 {
662 "title": "And Now for Something Completely Different",
663 "year": 1971
664 },
665 {
666 "title": "Monty Python and the Holy Grail",
667 "year": 1975
668 }
669 ]
670
Benjamin Petersonfc8e9882014-04-13 19:52:14 -0400671 If *infile* is not specified, read from :attr:`sys.stdin`.
672
673.. cmdoption:: outfile
Benjamin Peterson940e2072014-03-21 23:17:29 -0500674
675 Write the output of the *infile* to the given *outfile*. Otherwise, write it
676 to :attr:`sys.stdout`.
677
Berker Peksag39e4c4d2014-11-10 09:56:54 +0200678.. cmdoption:: --sort-keys
679
680 Sort the output of dictionaries alphabetically by key.
681
682 .. versionadded:: 3.5
683
Benjamin Peterson940e2072014-03-21 23:17:29 -0500684.. cmdoption:: -h, --help
685
686 Show the help message.
Serhiy Storchaka715f01b2014-11-27 19:45:31 +0200687
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200688
689.. rubric:: Footnotes
690
691.. [#rfc-errata] As noted in `the errata for RFC 7159
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300692 <https://www.rfc-editor.org/errata_search.php?rfc=7159>`_,
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200693 JSON permits literal U+2028 (LINE SEPARATOR) and
694 U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript
695 (as of ECMAScript Edition 5.1) does not.