blob: 6f5f8b15a8d0bcffe7347822bb263046ad880700 [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
13`JavaScript <http://en.wikipedia.org/wiki/JavaScript>`_ object literal syntax
14(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
Ezio Melotti84e59aa2012-04-13 21:02:18 -0600109.. highlight:: python3
Christian Heimes90540002008-05-08 14:29:10 +0000110
Georg Brandl48310cd2009-01-03 21:18:54 +0000111.. note::
Christian Heimes90540002008-05-08 14:29:10 +0000112
Antoine Pitrou331624b2012-08-24 19:37:23 +0200113 JSON is a subset of `YAML <http://yaml.org/>`_ 1.2. The JSON produced by
114 this module's default settings (in particular, the default *separators*
115 value) is also a subset of YAML 1.0 and 1.1. This module can thus also be
116 used as a YAML serializer.
Christian Heimes90540002008-05-08 14:29:10 +0000117
118
119Basic Usage
120-----------
121
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200122.. function:: dump(obj, fp, skipkeys=False, ensure_ascii=True, \
123 check_circular=True, allow_nan=True, cls=None, \
124 indent=None, separators=None, default=None, \
125 sort_keys=False, **kw)
Christian Heimes90540002008-05-08 14:29:10 +0000126
127 Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200128 :term:`file-like object`) using this :ref:`conversion table
129 <py-to-json-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000130
131 If *skipkeys* is ``True`` (default: ``False``), then dict keys that are not
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000132 of a basic type (:class:`str`, :class:`int`, :class:`float`, :class:`bool`,
133 ``None``) will be skipped instead of raising a :exc:`TypeError`.
Christian Heimes90540002008-05-08 14:29:10 +0000134
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000135 The :mod:`json` module always produces :class:`str` objects, not
136 :class:`bytes` objects. Therefore, ``fp.write()`` must support :class:`str`
137 input.
138
Éric Araujo6f7aa002012-01-16 10:09:20 +0100139 If *ensure_ascii* is ``True`` (the default), the output is guaranteed to
140 have all incoming non-ASCII characters escaped. If *ensure_ascii* is
141 ``False``, these characters will be output as-is.
142
Christian Heimes90540002008-05-08 14:29:10 +0000143 If *check_circular* is ``False`` (default: ``True``), then the circular
144 reference check for container types will be skipped and a circular reference
145 will result in an :exc:`OverflowError` (or worse).
146
147 If *allow_nan* is ``False`` (default: ``True``), then it will be a
148 :exc:`ValueError` to serialize out of range :class:`float` values (``nan``,
149 ``inf``, ``-inf``) in strict compliance of the JSON specification, instead of
150 using the JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
151
Raymond Hettingerb643ef82010-10-31 08:00:16 +0000152 If *indent* is a non-negative integer or string, then JSON array elements and
153 object members will be pretty-printed with that indent level. An indent level
R David Murrayd5315482011-04-12 21:09:18 -0400154 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default)
155 selects the most compact representation. Using a positive integer indent
Petri Lehtinen72c6eef2012-08-27 20:27:30 +0300156 indents that many spaces per level. If *indent* is a string (such as ``"\t"``),
R David Murrayd5315482011-04-12 21:09:18 -0400157 that string is used to indent each level.
Christian Heimes90540002008-05-08 14:29:10 +0000158
Petri Lehtinen72b14262012-08-28 07:08:44 +0300159 .. versionchanged:: 3.2
160 Allow strings for *indent* in addition to integers.
161
Ezio Melotti10031442012-11-29 00:42:56 +0200162 If specified, *separators* should be an ``(item_separator, key_separator)``
163 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
164 ``(',', ': ')`` otherwise. To get the most compact JSON representation,
165 you should specify ``(',', ':')`` to eliminate whitespace.
166
167 .. versionchanged:: 3.4
168 Use ``(',', ': ')`` as default if *indent* is not ``None``.
Christian Heimes90540002008-05-08 14:29:10 +0000169
Christian Heimes90540002008-05-08 14:29:10 +0000170 *default(obj)* is a function that should return a serializable version of
171 *obj* or raise :exc:`TypeError`. The default simply raises :exc:`TypeError`.
172
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200173 If *sort_keys* is ``True`` (default: ``False``), then the output of
174 dictionaries will be sorted by key.
175
Georg Brandl1f01deb2009-01-03 22:47:39 +0000176 To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
Christian Heimes90540002008-05-08 14:29:10 +0000177 :meth:`default` method to serialize additional types), specify it with the
Georg Brandld4460aa2010-10-15 17:03:02 +0000178 *cls* kwarg; otherwise :class:`JSONEncoder` is used.
Christian Heimes90540002008-05-08 14:29:10 +0000179
180
Andrew Svetlov2ec53be2012-10-28 14:10:30 +0200181.. function:: dumps(obj, skipkeys=False, ensure_ascii=True, \
182 check_circular=True, allow_nan=True, cls=None, \
183 indent=None, separators=None, default=None, \
184 sort_keys=False, **kw)
Christian Heimes90540002008-05-08 14:29:10 +0000185
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200186 Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion
187 table <py-to-json-table>`. The arguments have the same meaning as in
188 :func:`dump`.
Christian Heimes90540002008-05-08 14:29:10 +0000189
Ezio Melotti60adf952011-04-15 07:37:00 +0300190 .. note::
191
Georg Brandl340d2692011-04-16 16:54:15 +0200192 Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol,
193 so trying to serialize multiple objects with repeated calls to
194 :func:`dump` using the same *fp* will result in an invalid JSON file.
195
Senthil Kumaranf2123d22012-03-17 00:40:34 -0700196 .. note::
197
198 Keys in key/value pairs of JSON are always of the type :class:`str`. When
199 a dictionary is converted into JSON, all the keys of the dictionary are
Terry Jan Reedy9cbcc2f2013-03-08 19:35:15 -0500200 coerced to strings. As a result of this, if a dictionary is converted
Senthil Kumaranf2123d22012-03-17 00:40:34 -0700201 into JSON and then back into a dictionary, the dictionary may not equal
202 the original one. That is, ``loads(dumps(x)) != x`` if x has non-string
203 keys.
Christian Heimes90540002008-05-08 14:29:10 +0000204
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000205.. 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 +0000206
Antoine Pitrou15251a92012-08-24 19:49:08 +0200207 Deserialize *fp* (a ``.read()``-supporting :term:`file-like object`
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200208 containing a JSON document) to a Python object using this :ref:`conversion
209 table <json-to-py-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000210
Christian Heimes90540002008-05-08 14:29:10 +0000211 *object_hook* is an optional function that will be called with the result of
Benjamin Peterson25c95f12009-05-08 20:42:26 +0000212 any object literal decoded (a :class:`dict`). The return value of
Christian Heimes90540002008-05-08 14:29:10 +0000213 *object_hook* will be used instead of the :class:`dict`. This feature can be used
Antoine Pitrou331624b2012-08-24 19:37:23 +0200214 to implement custom decoders (e.g. `JSON-RPC <http://www.jsonrpc.org>`_
215 class hinting).
Christian Heimes90540002008-05-08 14:29:10 +0000216
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000217 *object_pairs_hook* is an optional function that will be called with the
Benjamin Peterson25c95f12009-05-08 20:42:26 +0000218 result of any object literal decoded with an ordered list of pairs. The
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000219 return value of *object_pairs_hook* will be used instead of the
220 :class:`dict`. This feature can be used to implement custom decoders that
221 rely on the order that the key and value pairs are decoded (for example,
222 :func:`collections.OrderedDict` will remember the order of insertion). If
223 *object_hook* is also defined, the *object_pairs_hook* takes priority.
224
225 .. versionchanged:: 3.1
Hirokazu Yamamotoae9eb5c2009-04-26 03:34:06 +0000226 Added support for *object_pairs_hook*.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000227
Christian Heimes90540002008-05-08 14:29:10 +0000228 *parse_float*, if specified, will be called with the string of every JSON
229 float to be decoded. By default, this is equivalent to ``float(num_str)``.
230 This can be used to use another datatype or parser for JSON floats
231 (e.g. :class:`decimal.Decimal`).
232
233 *parse_int*, if specified, will be called with the string of every JSON int
234 to be decoded. By default, this is equivalent to ``int(num_str)``. This can
235 be used to use another datatype or parser for JSON integers
236 (e.g. :class:`float`).
237
238 *parse_constant*, if specified, will be called with one of the following
Hynek Schlawack9729fd42012-05-16 19:01:04 +0200239 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.
240 This can be used to raise an exception if invalid JSON numbers
Christian Heimes90540002008-05-08 14:29:10 +0000241 are encountered.
242
Hynek Schlawackf54c0602012-05-20 18:32:53 +0200243 .. versionchanged:: 3.1
Hynek Schlawack1203e832012-05-20 12:03:17 +0200244 *parse_constant* doesn't get called on 'null', 'true', 'false' anymore.
245
Christian Heimes90540002008-05-08 14:29:10 +0000246 To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
Georg Brandld4460aa2010-10-15 17:03:02 +0000247 kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments
248 will be passed to the constructor of the class.
Christian Heimes90540002008-05-08 14:29:10 +0000249
Felix Crux60fb9712013-08-12 17:39:51 -0400250 If the data being deserialized is not a valid JSON document, a
251 :exc:`ValueError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000252
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000253.. 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 +0000254
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000255 Deserialize *s* (a :class:`str` instance containing a JSON document) to a
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200256 Python object using this :ref:`conversion table <json-to-py-table>`.
Christian Heimes90540002008-05-08 14:29:10 +0000257
Antoine Pitrou00d650b2011-01-21 21:37:32 +0000258 The other arguments have the same meaning as in :func:`load`, except
259 *encoding* which is ignored and deprecated.
Christian Heimes90540002008-05-08 14:29:10 +0000260
Felix Cruxb4357992013-08-12 17:39:51 -0400261 If the data being deserialized is not a valid JSON document, a
262 :exc:`ValueError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000263
Antoine Pitrou331624b2012-08-24 19:37:23 +0200264Encoders and Decoders
Christian Heimes90540002008-05-08 14:29:10 +0000265---------------------
266
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000267.. 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 +0000268
269 Simple JSON decoder.
270
271 Performs the following translations in decoding by default:
272
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200273 .. _json-to-py-table:
274
Christian Heimes90540002008-05-08 14:29:10 +0000275 +---------------+-------------------+
276 | JSON | Python |
277 +===============+===================+
278 | object | dict |
279 +---------------+-------------------+
280 | array | list |
281 +---------------+-------------------+
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000282 | string | str |
Christian Heimes90540002008-05-08 14:29:10 +0000283 +---------------+-------------------+
Georg Brandl639ce962009-04-11 18:18:16 +0000284 | number (int) | int |
Christian Heimes90540002008-05-08 14:29:10 +0000285 +---------------+-------------------+
286 | number (real) | float |
287 +---------------+-------------------+
288 | true | True |
289 +---------------+-------------------+
290 | false | False |
291 +---------------+-------------------+
292 | null | None |
293 +---------------+-------------------+
294
295 It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their
296 corresponding ``float`` values, which is outside the JSON spec.
297
Christian Heimes90540002008-05-08 14:29:10 +0000298 *object_hook*, if specified, will be called with the result of every JSON
299 object decoded and its return value will be used in place of the given
300 :class:`dict`. This can be used to provide custom deserializations (e.g. to
301 support JSON-RPC class hinting).
302
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000303 *object_pairs_hook*, if specified will be called with the result of every
304 JSON object decoded with an ordered list of pairs. The return value of
305 *object_pairs_hook* will be used instead of the :class:`dict`. This
306 feature can be used to implement custom decoders that rely on the order
307 that the key and value pairs are decoded (for example,
308 :func:`collections.OrderedDict` will remember the order of insertion). If
309 *object_hook* is also defined, the *object_pairs_hook* takes priority.
310
311 .. versionchanged:: 3.1
Hirokazu Yamamotoae9eb5c2009-04-26 03:34:06 +0000312 Added support for *object_pairs_hook*.
Raymond Hettinger9b8d0692009-04-21 03:27:12 +0000313
Christian Heimes90540002008-05-08 14:29:10 +0000314 *parse_float*, if specified, will be called with the string of every JSON
315 float to be decoded. By default, this is equivalent to ``float(num_str)``.
316 This can be used to use another datatype or parser for JSON floats
317 (e.g. :class:`decimal.Decimal`).
318
319 *parse_int*, if specified, will be called with the string of every JSON int
320 to be decoded. By default, this is equivalent to ``int(num_str)``. This can
321 be used to use another datatype or parser for JSON integers
322 (e.g. :class:`float`).
323
324 *parse_constant*, if specified, will be called with one of the following
325 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``, ``'null'``, ``'true'``,
326 ``'false'``. This can be used to raise an exception if invalid JSON numbers
327 are encountered.
328
Georg Brandld4460aa2010-10-15 17:03:02 +0000329 If *strict* is ``False`` (``True`` is the default), then control characters
330 will be allowed inside strings. Control characters in this context are
331 those with character codes in the 0-31 range, including ``'\t'`` (tab),
332 ``'\n'``, ``'\r'`` and ``'\0'``.
333
Felix Crux654f0032013-08-12 17:39:51 -0400334 If the data being deserialized is not a valid JSON document, a
335 :exc:`ValueError` will be raised.
Christian Heimes90540002008-05-08 14:29:10 +0000336
337 .. method:: decode(s)
338
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000339 Return the Python representation of *s* (a :class:`str` instance
340 containing a JSON document)
Christian Heimes90540002008-05-08 14:29:10 +0000341
342 .. method:: raw_decode(s)
343
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000344 Decode a JSON document from *s* (a :class:`str` beginning with a
345 JSON document) and return a 2-tuple of the Python representation
346 and the index in *s* where the document ended.
Christian Heimes90540002008-05-08 14:29:10 +0000347
348 This can be used to decode a JSON document from a string that may have
349 extraneous data at the end.
350
351
Georg Brandlcd7f32b2009-06-08 09:13:45 +0000352.. 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 +0000353
354 Extensible JSON encoder for Python data structures.
355
356 Supports the following objects and types by default:
357
Ezio Melotti6d2bc6e2013-03-29 03:59:29 +0200358 .. _py-to-json-table:
359
Ethan Furmana4998a72013-08-10 13:01:45 -0700360 +----------------------------------------+---------------+
361 | Python | JSON |
362 +========================================+===============+
363 | dict | object |
364 +----------------------------------------+---------------+
365 | list, tuple | array |
366 +----------------------------------------+---------------+
367 | str | string |
368 +----------------------------------------+---------------+
369 | int, float, int- & float-derived Enums | number |
370 +----------------------------------------+---------------+
371 | True | true |
372 +----------------------------------------+---------------+
373 | False | false |
374 +----------------------------------------+---------------+
375 | None | null |
376 +----------------------------------------+---------------+
377
378 .. versionchanged:: 3.4
379 Added support for int- and float-derived Enum classes.
Christian Heimes90540002008-05-08 14:29:10 +0000380
381 To extend this to recognize other objects, subclass and implement a
382 :meth:`default` method with another method that returns a serializable object
383 for ``o`` if possible, otherwise it should call the superclass implementation
384 (to raise :exc:`TypeError`).
385
386 If *skipkeys* is ``False`` (the default), then it is a :exc:`TypeError` to
Georg Brandl639ce962009-04-11 18:18:16 +0000387 attempt encoding of keys that are not str, int, float or None. If
Christian Heimes90540002008-05-08 14:29:10 +0000388 *skipkeys* is ``True``, such items are simply skipped.
389
Benjamin Petersonc6b607d2009-05-02 12:36:44 +0000390 If *ensure_ascii* is ``True`` (the default), the output is guaranteed to
391 have all incoming non-ASCII characters escaped. If *ensure_ascii* is
392 ``False``, these characters will be output as-is.
Christian Heimes90540002008-05-08 14:29:10 +0000393
394 If *check_circular* is ``True`` (the default), then lists, dicts, and custom
395 encoded objects will be checked for circular references during encoding to
396 prevent an infinite recursion (which would cause an :exc:`OverflowError`).
397 Otherwise, no such check takes place.
398
399 If *allow_nan* is ``True`` (the default), then ``NaN``, ``Infinity``, and
400 ``-Infinity`` will be encoded as such. This behavior is not JSON
401 specification compliant, but is consistent with most JavaScript based
402 encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode
403 such floats.
404
Georg Brandl6a74da32010-08-22 20:23:38 +0000405 If *sort_keys* is ``True`` (default ``False``), then the output of dictionaries
Christian Heimes90540002008-05-08 14:29:10 +0000406 will be sorted by key; this is useful for regression tests to ensure that
407 JSON serializations can be compared on a day-to-day basis.
408
Petri Lehtinen72b14262012-08-28 07:08:44 +0300409 If *indent* is a non-negative integer or string, then JSON array elements and
410 object members will be pretty-printed with that indent level. An indent level
411 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default)
412 selects the most compact representation. Using a positive integer indent
413 indents that many spaces per level. If *indent* is a string (such as ``"\t"``),
414 that string is used to indent each level.
415
416 .. versionchanged:: 3.2
417 Allow strings for *indent* in addition to integers.
Christian Heimes90540002008-05-08 14:29:10 +0000418
419 If specified, *separators* should be an ``(item_separator, key_separator)``
Ezio Melotti10031442012-11-29 00:42:56 +0200420 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and
421 ``(',', ': ')`` otherwise. To get the most compact JSON representation,
422 you should specify ``(',', ':')`` to eliminate whitespace.
423
424 .. versionchanged:: 3.4
425 Use ``(',', ': ')`` as default if *indent* is not ``None``.
Christian Heimes90540002008-05-08 14:29:10 +0000426
427 If specified, *default* is a function that gets called for objects that can't
428 otherwise be serialized. It should return a JSON encodable version of the
429 object or raise a :exc:`TypeError`.
430
Christian Heimes90540002008-05-08 14:29:10 +0000431
432 .. method:: default(o)
433
434 Implement this method in a subclass such that it returns a serializable
435 object for *o*, or calls the base implementation (to raise a
436 :exc:`TypeError`).
437
438 For example, to support arbitrary iterators, you could implement default
439 like this::
Georg Brandl48310cd2009-01-03 21:18:54 +0000440
Christian Heimes90540002008-05-08 14:29:10 +0000441 def default(self, o):
442 try:
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000443 iterable = iter(o)
Christian Heimes90540002008-05-08 14:29:10 +0000444 except TypeError:
Benjamin Petersone9bbc8b2008-09-28 02:06:32 +0000445 pass
Christian Heimes90540002008-05-08 14:29:10 +0000446 else:
447 return list(iterable)
R David Murraydd246172013-03-17 21:52:35 -0400448 # Let the base class default method raise the TypeError
Georg Brandl0bb73b82010-09-03 22:36:22 +0000449 return json.JSONEncoder.default(self, o)
Christian Heimes90540002008-05-08 14:29:10 +0000450
451
452 .. method:: encode(o)
453
454 Return a JSON string representation of a Python data structure, *o*. For
455 example::
456
Georg Brandl0bb73b82010-09-03 22:36:22 +0000457 >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
Christian Heimes90540002008-05-08 14:29:10 +0000458 '{"foo": ["bar", "baz"]}'
459
460
461 .. method:: iterencode(o)
462
463 Encode the given object, *o*, and yield each string representation as
464 available. For example::
Georg Brandl48310cd2009-01-03 21:18:54 +0000465
Georg Brandl0bb73b82010-09-03 22:36:22 +0000466 for chunk in json.JSONEncoder().iterencode(bigobject):
Christian Heimes90540002008-05-08 14:29:10 +0000467 mysocket.write(chunk)
Antoine Pitrou331624b2012-08-24 19:37:23 +0200468
469
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200470Standard Compliance and Interoperability
471----------------------------------------
Antoine Pitrou331624b2012-08-24 19:37:23 +0200472
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200473The JSON format is specified by :rfc:`7159` and by
474`ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_.
475This section details this module's level of compliance with the RFC.
476For simplicity, :class:`JSONEncoder` and :class:`JSONDecoder` subclasses, and
477parameters other than those explicitly mentioned, are not considered.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200478
479This module does not comply with the RFC in a strict fashion, implementing some
480extensions that are valid JavaScript but not valid JSON. In particular:
481
Antoine Pitrou331624b2012-08-24 19:37:23 +0200482- Infinite and NaN number values are accepted and output;
483- Repeated names within an object are accepted, and only the value of the last
484 name-value pair is used.
485
486Since the RFC permits RFC-compliant parsers to accept input texts that are not
487RFC-compliant, this module's deserializer is technically RFC-compliant under
488default settings.
489
490Character Encodings
491^^^^^^^^^^^^^^^^^^^
492
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200493The RFC requires that JSON be represented using either UTF-8, UTF-16, or
494UTF-32, with UTF-8 being the recommended default for maximum interoperability.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200495
496As permitted, though not required, by the RFC, this module's serializer sets
497*ensure_ascii=True* by default, thus escaping the output so that the resulting
498strings only contain ASCII characters.
499
500Other than the *ensure_ascii* parameter, this module is defined strictly in
501terms of conversion between Python objects and
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200502:class:`Unicode strings <str>`, and thus does not otherwise directly address
503the issue of character encodings.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200504
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200505The RFC prohibits adding a byte order mark (BOM) to the start of a JSON text,
506and this module's serializer does not add a BOM to its output.
507The RFC permits, but does not require, JSON deserializers to ignore an initial
508BOM in their input. This module's deserializer raises a :exc:`ValueError`
509when an initial BOM is present.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200510
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200511The RFC does not explicitly forbid JSON strings which contain byte sequences
512that don't correspond to valid Unicode characters (e.g. unpaired UTF-16
513surrogates), but it does note that they may cause interoperability problems.
514By default, this module accepts and outputs (when present in the original
Serhiy Storchakad3faf432015-01-18 11:28:37 +0200515:class:`str`) code points for such sequences.
Antoine Pitrou331624b2012-08-24 19:37:23 +0200516
517
518Infinite and NaN Number Values
519^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
520
521The RFC does not permit the representation of infinite or NaN number values.
522Despite that, by default, this module accepts and outputs ``Infinity``,
523``-Infinity``, and ``NaN`` as if they were valid JSON number literal values::
524
525 >>> # Neither of these calls raises an exception, but the results are not valid JSON
526 >>> json.dumps(float('-inf'))
527 '-Infinity'
528 >>> json.dumps(float('nan'))
529 'NaN'
530 >>> # Same when deserializing
531 >>> json.loads('-Infinity')
532 -inf
533 >>> json.loads('NaN')
534 nan
535
536In the serializer, the *allow_nan* parameter can be used to alter this
537behavior. In the deserializer, the *parse_constant* parameter can be used to
538alter this behavior.
539
540
541Repeated Names Within an Object
542^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
543
544The RFC specifies that the names within a JSON object should be unique, but
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200545does not mandate how repeated names in JSON objects should be handled. By
Antoine Pitrou331624b2012-08-24 19:37:23 +0200546default, this module does not raise an exception; instead, it ignores all but
547the last name-value pair for a given name::
548
549 >>> weird_json = '{"x": 1, "x": 2, "x": 3}'
550 >>> json.loads(weird_json)
551 {'x': 3}
552
553The *object_pairs_hook* parameter can be used to alter this behavior.
Serhiy Storchaka7a6915e2014-11-27 19:41:47 +0200554
555
556Top-level Non-Object, Non-Array Values
557^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
558
559The old version of JSON specified by the obsolete :rfc:`4627` required that
560the top-level value of a JSON text must be either a JSON object or array
561(Python :class:`dict` or :class:`list`), and could not be a JSON null,
562boolean, number, or string value. :rfc:`7159` removed that restriction, and
563this module does not and has never implemented that restriction in either its
564serializer or its deserializer.
565
566Regardless, for maximum interoperability, you may wish to voluntarily adhere
567to the restriction yourself.
568
569
570Implementation Limitations
571^^^^^^^^^^^^^^^^^^^^^^^^^^
572
573Some JSON deserializer implementations may set limits on:
574
575* the size of accepted JSON texts
576* the maximum level of nesting of JSON objects and arrays
577* the range and precision of JSON numbers
578* the content and maximum length of JSON strings
579
580This module does not impose any such limits beyond those of the relevant
581Python datatypes themselves or the Python interpreter itself.
582
583When serializing to JSON, beware any such limitations in applications that may
584consume your JSON. In particular, it is common for JSON numbers to be
585deserialized into IEEE 754 double precision numbers and thus subject to that
586representation's range and precision limitations. This is especially relevant
587when serializing Python :class:`int` values of extremely large magnitude, or
588when serializing instances of "exotic" numerical types such as
589:class:`decimal.Decimal`.
590
591
592.. rubric:: Footnotes
593
594.. [#rfc-errata] As noted in `the errata for RFC 7159
595 <http://www.rfc-editor.org/errata_search.php?rfc=7159>`_,
596 JSON permits literal U+2028 (LINE SEPARATOR) and
597 U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript
598 (as of ECMAScript Edition 5.1) does not.