[2] | 1 | :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>
|
---|
| 8 | .. versionadded:: 2.6
|
---|
| 9 |
|
---|
[391] | 10 | `JSON (JavaScript Object Notation) <http://json.org>`_, specified by
|
---|
| 11 | :rfc:`4627`, is a lightweight data interchange format based on a subset of
|
---|
| 12 | `JavaScript <http://en.wikipedia.org/wiki/JavaScript>`_ syntax (`ECMA-262 3rd
|
---|
| 13 | edition <http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf>`_).
|
---|
[2] | 14 |
|
---|
| 15 | :mod:`json` exposes an API familiar to users of the standard library
|
---|
| 16 | :mod:`marshal` and :mod:`pickle` modules.
|
---|
| 17 |
|
---|
| 18 | Encoding basic Python object hierarchies::
|
---|
| 19 |
|
---|
| 20 | >>> import json
|
---|
| 21 | >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
|
---|
| 22 | '["foo", {"bar": ["baz", null, 1.0, 2]}]'
|
---|
| 23 | >>> print json.dumps("\"foo\bar")
|
---|
| 24 | "\"foo\bar"
|
---|
| 25 | >>> print json.dumps(u'\u1234')
|
---|
| 26 | "\u1234"
|
---|
| 27 | >>> print json.dumps('\\')
|
---|
| 28 | "\\"
|
---|
| 29 | >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
|
---|
| 30 | {"a": 0, "b": 0, "c": 0}
|
---|
| 31 | >>> from StringIO import StringIO
|
---|
| 32 | >>> io = StringIO()
|
---|
| 33 | >>> json.dump(['streaming API'], io)
|
---|
| 34 | >>> io.getvalue()
|
---|
| 35 | '["streaming API"]'
|
---|
| 36 |
|
---|
| 37 | Compact encoding::
|
---|
| 38 |
|
---|
| 39 | >>> import json
|
---|
| 40 | >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
|
---|
| 41 | '[1,2,3,{"4":5,"6":7}]'
|
---|
| 42 |
|
---|
| 43 | Pretty printing::
|
---|
| 44 |
|
---|
| 45 | >>> import json
|
---|
[391] | 46 | >>> print json.dumps({'4': 5, '6': 7}, sort_keys=True,
|
---|
| 47 | ... indent=4, separators=(',', ': '))
|
---|
[2] | 48 | {
|
---|
| 49 | "4": 5,
|
---|
| 50 | "6": 7
|
---|
| 51 | }
|
---|
| 52 |
|
---|
| 53 | Decoding JSON::
|
---|
| 54 |
|
---|
| 55 | >>> import json
|
---|
| 56 | >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
|
---|
| 57 | [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
|
---|
| 58 | >>> json.loads('"\\"foo\\bar"')
|
---|
| 59 | u'"foo\x08ar'
|
---|
| 60 | >>> from StringIO import StringIO
|
---|
| 61 | >>> io = StringIO('["streaming API"]')
|
---|
| 62 | >>> json.load(io)
|
---|
| 63 | [u'streaming API']
|
---|
| 64 |
|
---|
| 65 | Specializing 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
|
---|
| 72 | ...
|
---|
| 73 | >>> 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 |
|
---|
| 80 | Extending :class:`JSONEncoder`::
|
---|
| 81 |
|
---|
| 82 | >>> import json
|
---|
| 83 | >>> class ComplexEncoder(json.JSONEncoder):
|
---|
| 84 | ... def default(self, obj):
|
---|
| 85 | ... if isinstance(obj, complex):
|
---|
| 86 | ... return [obj.real, obj.imag]
|
---|
[391] | 87 | ... # Let the base class default method raise the TypeError
|
---|
[2] | 88 | ... return json.JSONEncoder.default(self, obj)
|
---|
| 89 | ...
|
---|
| 90 | >>> dumps(2 + 1j, cls=ComplexEncoder)
|
---|
| 91 | '[2.0, 1.0]'
|
---|
| 92 | >>> ComplexEncoder().encode(2 + 1j)
|
---|
| 93 | '[2.0, 1.0]'
|
---|
| 94 | >>> list(ComplexEncoder().iterencode(2 + 1j))
|
---|
| 95 | ['[', '2.0', ', ', '1.0', ']']
|
---|
| 96 |
|
---|
| 97 |
|
---|
| 98 | .. highlight:: none
|
---|
| 99 |
|
---|
| 100 | Using json.tool from the shell to validate and pretty-print::
|
---|
| 101 |
|
---|
| 102 | $ echo '{"json":"obj"}' | python -mjson.tool
|
---|
| 103 | {
|
---|
| 104 | "json": "obj"
|
---|
| 105 | }
|
---|
[391] | 106 | $ echo '{1.2:3.4}' | python -mjson.tool
|
---|
| 107 | Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
|
---|
[2] | 108 |
|
---|
| 109 | .. highlight:: python
|
---|
| 110 |
|
---|
| 111 | .. note::
|
---|
| 112 |
|
---|
[391] | 113 | 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.
|
---|
[2] | 117 |
|
---|
| 118 |
|
---|
| 119 | Basic Usage
|
---|
| 120 | -----------
|
---|
| 121 |
|
---|
[391] | 122 | .. function:: dump(obj, fp, skipkeys=False, ensure_ascii=True, \
|
---|
| 123 | check_circular=True, allow_nan=True, cls=None, \
|
---|
| 124 | indent=None, separators=None, encoding="utf-8", \
|
---|
| 125 | default=None, sort_keys=False, **kw)
|
---|
[2] | 126 |
|
---|
| 127 | Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting
|
---|
[391] | 128 | :term:`file-like object`) using this :ref:`conversion table
|
---|
| 129 | <py-to-json-table>`.
|
---|
[2] | 130 |
|
---|
| 131 | If *skipkeys* is ``True`` (default: ``False``), then dict keys that are not
|
---|
| 132 | of a basic type (:class:`str`, :class:`unicode`, :class:`int`, :class:`long`,
|
---|
| 133 | :class:`float`, :class:`bool`, ``None``) will be skipped instead of raising a
|
---|
| 134 | :exc:`TypeError`.
|
---|
| 135 |
|
---|
[391] | 136 | If *ensure_ascii* is ``True`` (the default), all non-ASCII characters in the
|
---|
| 137 | output are escaped with ``\uXXXX`` sequences, and the result is a
|
---|
| 138 | :class:`str` instance consisting of ASCII characters only. If
|
---|
| 139 | *ensure_ascii* is ``False``, some chunks written to *fp* may be
|
---|
| 140 | :class:`unicode` instances. This usually happens because the input contains
|
---|
| 141 | unicode strings or the *encoding* parameter is used. Unless ``fp.write()``
|
---|
| 142 | explicitly understands :class:`unicode` (as in :func:`codecs.getwriter`)
|
---|
| 143 | this is likely to cause an error.
|
---|
[2] | 144 |
|
---|
| 145 | 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 |
|
---|
| 154 | If *indent* is a non-negative integer, then JSON array elements and object
|
---|
[391] | 155 | members will be pretty-printed with that indent level. An indent level of 0,
|
---|
| 156 | or negative, will only insert newlines. ``None`` (the default) selects the
|
---|
| 157 | most compact representation.
|
---|
[2] | 158 |
|
---|
[391] | 159 | .. note::
|
---|
| 160 |
|
---|
| 161 | Since the default item separator is ``', '``, the output might include
|
---|
| 162 | trailing whitespace when *indent* is specified. You can use
|
---|
| 163 | ``separators=(',', ': ')`` to avoid this.
|
---|
| 164 |
|
---|
[2] | 165 | If *separators* is an ``(item_separator, dict_separator)`` tuple, then it
|
---|
| 166 | will be used instead of the default ``(', ', ': ')`` separators. ``(',',
|
---|
| 167 | ':')`` is the most compact JSON representation.
|
---|
| 168 |
|
---|
| 169 | *encoding* is the character encoding for str instances, default is UTF-8.
|
---|
| 170 |
|
---|
| 171 | *default(obj)* is a function that should return a serializable version of
|
---|
| 172 | *obj* or raise :exc:`TypeError`. The default simply raises :exc:`TypeError`.
|
---|
| 173 |
|
---|
[391] | 174 | If *sort_keys* is ``True`` (default: ``False``), then the output of
|
---|
| 175 | dictionaries will be sorted by key.
|
---|
| 176 |
|
---|
[2] | 177 | To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
|
---|
| 178 | :meth:`default` method to serialize additional types), specify it with the
|
---|
[391] | 179 | *cls* kwarg; otherwise :class:`JSONEncoder` is used.
|
---|
[2] | 180 |
|
---|
[391] | 181 | .. note::
|
---|
[2] | 182 |
|
---|
[391] | 183 | Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol so
|
---|
| 184 | trying to serialize more objects with repeated calls to :func:`dump` and
|
---|
| 185 | the same *fp* will result in an invalid JSON file.
|
---|
[2] | 186 |
|
---|
[391] | 187 | .. function:: dumps(obj, skipkeys=False, ensure_ascii=True, \
|
---|
| 188 | check_circular=True, allow_nan=True, cls=None, \
|
---|
| 189 | indent=None, separators=None, encoding="utf-8", \
|
---|
| 190 | default=None, sort_keys=False, **kw)
|
---|
[2] | 191 |
|
---|
[391] | 192 | Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion
|
---|
| 193 | table <py-to-json-table>`. If *ensure_ascii* is ``False``, the result may
|
---|
| 194 | contain non-ASCII characters and the return value may be a :class:`unicode`
|
---|
| 195 | instance.
|
---|
[2] | 196 |
|
---|
[391] | 197 | The arguments have the same meaning as in :func:`dump`.
|
---|
[2] | 198 |
|
---|
[391] | 199 | .. note::
|
---|
[2] | 200 |
|
---|
[391] | 201 | Keys in key/value pairs of JSON are always of the type :class:`str`. When
|
---|
| 202 | a dictionary is converted into JSON, all the keys of the dictionary are
|
---|
| 203 | coerced to strings. As a result of this, if a dictionary is converted
|
---|
| 204 | into JSON and then back into a dictionary, the dictionary may not equal
|
---|
| 205 | the original one. That is, ``loads(dumps(x)) != x`` if x has non-string
|
---|
| 206 | keys.
|
---|
[2] | 207 |
|
---|
[391] | 208 | .. function:: load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
|
---|
| 209 |
|
---|
| 210 | Deserialize *fp* (a ``.read()``-supporting :term:`file-like object`
|
---|
| 211 | containing a JSON document) to a Python object using this :ref:`conversion
|
---|
| 212 | table <json-to-py-table>`.
|
---|
| 213 |
|
---|
[2] | 214 | If the contents of *fp* are encoded with an ASCII based encoding other than
|
---|
| 215 | UTF-8 (e.g. latin-1), then an appropriate *encoding* name must be specified.
|
---|
| 216 | Encodings that are not ASCII based (such as UCS-2) are not allowed, and
|
---|
| 217 | should be wrapped with ``codecs.getreader(encoding)(fp)``, or simply decoded
|
---|
| 218 | to a :class:`unicode` object and passed to :func:`loads`.
|
---|
| 219 |
|
---|
| 220 | *object_hook* is an optional function that will be called with the result of
|
---|
| 221 | any object literal decoded (a :class:`dict`). The return value of
|
---|
| 222 | *object_hook* will be used instead of the :class:`dict`. This feature can be used
|
---|
[391] | 223 | to implement custom decoders (e.g. `JSON-RPC <http://www.jsonrpc.org>`_
|
---|
| 224 | class hinting).
|
---|
[2] | 225 |
|
---|
[391] | 226 | *object_pairs_hook* is an optional function that will be called with the
|
---|
| 227 | result of any object literal decoded with an ordered list of pairs. The
|
---|
| 228 | return value of *object_pairs_hook* will be used instead of the
|
---|
| 229 | :class:`dict`. This feature can be used to implement custom decoders that
|
---|
| 230 | rely on the order that the key and value pairs are decoded (for example,
|
---|
| 231 | :func:`collections.OrderedDict` will remember the order of insertion). If
|
---|
| 232 | *object_hook* is also defined, the *object_pairs_hook* takes priority.
|
---|
| 233 |
|
---|
| 234 | .. versionchanged:: 2.7
|
---|
| 235 | Added support for *object_pairs_hook*.
|
---|
| 236 |
|
---|
[2] | 237 | *parse_float*, if specified, will be called with the string of every JSON
|
---|
| 238 | float to be decoded. By default, this is equivalent to ``float(num_str)``.
|
---|
| 239 | This can be used to use another datatype or parser for JSON floats
|
---|
| 240 | (e.g. :class:`decimal.Decimal`).
|
---|
| 241 |
|
---|
| 242 | *parse_int*, if specified, will be called with the string of every JSON int
|
---|
| 243 | to be decoded. By default, this is equivalent to ``int(num_str)``. This can
|
---|
| 244 | be used to use another datatype or parser for JSON integers
|
---|
| 245 | (e.g. :class:`float`).
|
---|
| 246 |
|
---|
| 247 | *parse_constant*, if specified, will be called with one of the following
|
---|
[391] | 248 | strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.
|
---|
| 249 | This can be used to raise an exception if invalid JSON numbers
|
---|
[2] | 250 | are encountered.
|
---|
| 251 |
|
---|
[391] | 252 | .. versionchanged:: 2.7
|
---|
| 253 | *parse_constant* doesn't get called on 'null', 'true', 'false' anymore.
|
---|
| 254 |
|
---|
[2] | 255 | To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
|
---|
[391] | 256 | kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments
|
---|
| 257 | will be passed to the constructor of the class.
|
---|
[2] | 258 |
|
---|
| 259 |
|
---|
[391] | 260 | .. function:: loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
|
---|
[2] | 261 |
|
---|
| 262 | Deserialize *s* (a :class:`str` or :class:`unicode` instance containing a JSON
|
---|
[391] | 263 | document) to a Python object using this :ref:`conversion table
|
---|
| 264 | <json-to-py-table>`.
|
---|
[2] | 265 |
|
---|
| 266 | If *s* is a :class:`str` instance and is encoded with an ASCII based encoding
|
---|
| 267 | other than UTF-8 (e.g. latin-1), then an appropriate *encoding* name must be
|
---|
| 268 | specified. Encodings that are not ASCII based (such as UCS-2) are not
|
---|
| 269 | allowed and should be decoded to :class:`unicode` first.
|
---|
| 270 |
|
---|
[391] | 271 | The other arguments have the same meaning as in :func:`load`.
|
---|
[2] | 272 |
|
---|
| 273 |
|
---|
[391] | 274 | Encoders and Decoders
|
---|
[2] | 275 | ---------------------
|
---|
| 276 |
|
---|
[391] | 277 | .. class:: JSONDecoder([encoding[, object_hook[, parse_float[, parse_int[, parse_constant[, strict[, object_pairs_hook]]]]]]])
|
---|
[2] | 278 |
|
---|
| 279 | Simple JSON decoder.
|
---|
| 280 |
|
---|
| 281 | Performs the following translations in decoding by default:
|
---|
| 282 |
|
---|
[391] | 283 | .. _json-to-py-table:
|
---|
| 284 |
|
---|
[2] | 285 | +---------------+-------------------+
|
---|
| 286 | | JSON | Python |
|
---|
| 287 | +===============+===================+
|
---|
| 288 | | object | dict |
|
---|
| 289 | +---------------+-------------------+
|
---|
| 290 | | array | list |
|
---|
| 291 | +---------------+-------------------+
|
---|
| 292 | | string | unicode |
|
---|
| 293 | +---------------+-------------------+
|
---|
| 294 | | number (int) | int, long |
|
---|
| 295 | +---------------+-------------------+
|
---|
| 296 | | number (real) | float |
|
---|
| 297 | +---------------+-------------------+
|
---|
| 298 | | true | True |
|
---|
| 299 | +---------------+-------------------+
|
---|
| 300 | | false | False |
|
---|
| 301 | +---------------+-------------------+
|
---|
| 302 | | null | None |
|
---|
| 303 | +---------------+-------------------+
|
---|
| 304 |
|
---|
| 305 | It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their
|
---|
| 306 | corresponding ``float`` values, which is outside the JSON spec.
|
---|
| 307 |
|
---|
| 308 | *encoding* determines the encoding used to interpret any :class:`str` objects
|
---|
| 309 | decoded by this instance (UTF-8 by default). It has no effect when decoding
|
---|
| 310 | :class:`unicode` objects.
|
---|
| 311 |
|
---|
| 312 | Note that currently only encodings that are a superset of ASCII work, strings
|
---|
| 313 | of other encodings should be passed in as :class:`unicode`.
|
---|
| 314 |
|
---|
| 315 | *object_hook*, if specified, will be called with the result of every JSON
|
---|
| 316 | object decoded and its return value will be used in place of the given
|
---|
| 317 | :class:`dict`. This can be used to provide custom deserializations (e.g. to
|
---|
| 318 | support JSON-RPC class hinting).
|
---|
| 319 |
|
---|
[391] | 320 | *object_pairs_hook*, if specified will be called with the result of every
|
---|
| 321 | JSON object decoded with an ordered list of pairs. The return value of
|
---|
| 322 | *object_pairs_hook* will be used instead of the :class:`dict`. This
|
---|
| 323 | feature can be used to implement custom decoders that rely on the order
|
---|
| 324 | that the key and value pairs are decoded (for example,
|
---|
| 325 | :func:`collections.OrderedDict` will remember the order of insertion). If
|
---|
| 326 | *object_hook* is also defined, the *object_pairs_hook* takes priority.
|
---|
| 327 |
|
---|
| 328 | .. versionchanged:: 2.7
|
---|
| 329 | Added support for *object_pairs_hook*.
|
---|
| 330 |
|
---|
[2] | 331 | *parse_float*, if specified, will be called with the string of every JSON
|
---|
| 332 | float to be decoded. By default, this is equivalent to ``float(num_str)``.
|
---|
| 333 | This can be used to use another datatype or parser for JSON floats
|
---|
| 334 | (e.g. :class:`decimal.Decimal`).
|
---|
| 335 |
|
---|
| 336 | *parse_int*, if specified, will be called with the string of every JSON int
|
---|
| 337 | to be decoded. By default, this is equivalent to ``int(num_str)``. This can
|
---|
| 338 | be used to use another datatype or parser for JSON integers
|
---|
| 339 | (e.g. :class:`float`).
|
---|
| 340 |
|
---|
| 341 | *parse_constant*, if specified, will be called with one of the following
|
---|
| 342 | strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``, ``'null'``, ``'true'``,
|
---|
| 343 | ``'false'``. This can be used to raise an exception if invalid JSON numbers
|
---|
| 344 | are encountered.
|
---|
| 345 |
|
---|
[391] | 346 | If *strict* is ``False`` (``True`` is the default), then control characters
|
---|
| 347 | will be allowed inside strings. Control characters in this context are
|
---|
| 348 | those with character codes in the 0-31 range, including ``'\t'`` (tab),
|
---|
| 349 | ``'\n'``, ``'\r'`` and ``'\0'``.
|
---|
[2] | 350 |
|
---|
[391] | 351 | If the data being deserialized is not a valid JSON document, a
|
---|
| 352 | :exc:`ValueError` will be raised.
|
---|
| 353 |
|
---|
[2] | 354 | .. method:: decode(s)
|
---|
| 355 |
|
---|
| 356 | Return the Python representation of *s* (a :class:`str` or
|
---|
| 357 | :class:`unicode` instance containing a JSON document)
|
---|
| 358 |
|
---|
| 359 | .. method:: raw_decode(s)
|
---|
| 360 |
|
---|
| 361 | Decode a JSON document from *s* (a :class:`str` or :class:`unicode`
|
---|
| 362 | beginning with a JSON document) and return a 2-tuple of the Python
|
---|
| 363 | representation and the index in *s* where the document ended.
|
---|
| 364 |
|
---|
| 365 | This can be used to decode a JSON document from a string that may have
|
---|
| 366 | extraneous data at the end.
|
---|
| 367 |
|
---|
| 368 |
|
---|
| 369 | .. class:: JSONEncoder([skipkeys[, ensure_ascii[, check_circular[, allow_nan[, sort_keys[, indent[, separators[, encoding[, default]]]]]]]]])
|
---|
| 370 |
|
---|
| 371 | Extensible JSON encoder for Python data structures.
|
---|
| 372 |
|
---|
| 373 | Supports the following objects and types by default:
|
---|
| 374 |
|
---|
[391] | 375 | .. _py-to-json-table:
|
---|
| 376 |
|
---|
[2] | 377 | +-------------------+---------------+
|
---|
| 378 | | Python | JSON |
|
---|
| 379 | +===================+===============+
|
---|
| 380 | | dict | object |
|
---|
| 381 | +-------------------+---------------+
|
---|
| 382 | | list, tuple | array |
|
---|
| 383 | +-------------------+---------------+
|
---|
| 384 | | str, unicode | string |
|
---|
| 385 | +-------------------+---------------+
|
---|
| 386 | | int, long, float | number |
|
---|
| 387 | +-------------------+---------------+
|
---|
| 388 | | True | true |
|
---|
| 389 | +-------------------+---------------+
|
---|
| 390 | | False | false |
|
---|
| 391 | +-------------------+---------------+
|
---|
| 392 | | None | null |
|
---|
| 393 | +-------------------+---------------+
|
---|
| 394 |
|
---|
| 395 | To extend this to recognize other objects, subclass and implement a
|
---|
| 396 | :meth:`default` method with another method that returns a serializable object
|
---|
| 397 | for ``o`` if possible, otherwise it should call the superclass implementation
|
---|
| 398 | (to raise :exc:`TypeError`).
|
---|
| 399 |
|
---|
| 400 | If *skipkeys* is ``False`` (the default), then it is a :exc:`TypeError` to
|
---|
| 401 | attempt encoding of keys that are not str, int, long, float or None. If
|
---|
| 402 | *skipkeys* is ``True``, such items are simply skipped.
|
---|
| 403 |
|
---|
[391] | 404 | If *ensure_ascii* is ``True`` (the default), all non-ASCII characters in the
|
---|
| 405 | output are escaped with ``\uXXXX`` sequences, and the results are
|
---|
| 406 | :class:`str` instances consisting of ASCII characters only. If
|
---|
| 407 | *ensure_ascii* is ``False``, a result may be a :class:`unicode`
|
---|
| 408 | instance. This usually happens if the input contains unicode strings or the
|
---|
| 409 | *encoding* parameter is used.
|
---|
[2] | 410 |
|
---|
| 411 | If *check_circular* is ``True`` (the default), then lists, dicts, and custom
|
---|
| 412 | encoded objects will be checked for circular references during encoding to
|
---|
| 413 | prevent an infinite recursion (which would cause an :exc:`OverflowError`).
|
---|
| 414 | Otherwise, no such check takes place.
|
---|
| 415 |
|
---|
| 416 | If *allow_nan* is ``True`` (the default), then ``NaN``, ``Infinity``, and
|
---|
| 417 | ``-Infinity`` will be encoded as such. This behavior is not JSON
|
---|
| 418 | specification compliant, but is consistent with most JavaScript based
|
---|
| 419 | encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode
|
---|
| 420 | such floats.
|
---|
| 421 |
|
---|
[391] | 422 | If *sort_keys* is ``True`` (default ``False``), then the output of dictionaries
|
---|
[2] | 423 | will be sorted by key; this is useful for regression tests to ensure that
|
---|
| 424 | JSON serializations can be compared on a day-to-day basis.
|
---|
| 425 |
|
---|
| 426 | If *indent* is a non-negative integer (it is ``None`` by default), then JSON
|
---|
| 427 | array elements and object members will be pretty-printed with that indent
|
---|
| 428 | level. An indent level of 0 will only insert newlines. ``None`` is the most
|
---|
| 429 | compact representation.
|
---|
| 430 |
|
---|
[391] | 431 | .. note::
|
---|
| 432 |
|
---|
| 433 | Since the default item separator is ``', '``, the output might include
|
---|
| 434 | trailing whitespace when *indent* is specified. You can use
|
---|
| 435 | ``separators=(',', ': ')`` to avoid this.
|
---|
| 436 |
|
---|
[2] | 437 | If specified, *separators* should be an ``(item_separator, key_separator)``
|
---|
| 438 | tuple. The default is ``(', ', ': ')``. To get the most compact JSON
|
---|
| 439 | representation, you should specify ``(',', ':')`` to eliminate whitespace.
|
---|
| 440 |
|
---|
| 441 | If specified, *default* is a function that gets called for objects that can't
|
---|
| 442 | otherwise be serialized. It should return a JSON encodable version of the
|
---|
| 443 | object or raise a :exc:`TypeError`.
|
---|
| 444 |
|
---|
| 445 | If *encoding* is not ``None``, then all input strings will be transformed
|
---|
| 446 | into unicode using that encoding prior to JSON-encoding. The default is
|
---|
| 447 | UTF-8.
|
---|
| 448 |
|
---|
| 449 |
|
---|
| 450 | .. method:: default(o)
|
---|
| 451 |
|
---|
| 452 | Implement this method in a subclass such that it returns a serializable
|
---|
| 453 | object for *o*, or calls the base implementation (to raise a
|
---|
| 454 | :exc:`TypeError`).
|
---|
| 455 |
|
---|
| 456 | For example, to support arbitrary iterators, you could implement default
|
---|
| 457 | like this::
|
---|
| 458 |
|
---|
| 459 | def default(self, o):
|
---|
| 460 | try:
|
---|
| 461 | iterable = iter(o)
|
---|
| 462 | except TypeError:
|
---|
| 463 | pass
|
---|
| 464 | else:
|
---|
| 465 | return list(iterable)
|
---|
[391] | 466 | # Let the base class default method raise the TypeError
|
---|
[2] | 467 | return JSONEncoder.default(self, o)
|
---|
| 468 |
|
---|
| 469 |
|
---|
| 470 | .. method:: encode(o)
|
---|
| 471 |
|
---|
| 472 | Return a JSON string representation of a Python data structure, *o*. For
|
---|
| 473 | example::
|
---|
| 474 |
|
---|
| 475 | >>> JSONEncoder().encode({"foo": ["bar", "baz"]})
|
---|
| 476 | '{"foo": ["bar", "baz"]}'
|
---|
| 477 |
|
---|
| 478 |
|
---|
| 479 | .. method:: iterencode(o)
|
---|
| 480 |
|
---|
| 481 | Encode the given object, *o*, and yield each string representation as
|
---|
| 482 | available. For example::
|
---|
| 483 |
|
---|
| 484 | for chunk in JSONEncoder().iterencode(bigobject):
|
---|
| 485 | mysocket.write(chunk)
|
---|
[391] | 486 |
|
---|
| 487 |
|
---|
| 488 | Standard Compliance
|
---|
| 489 | -------------------
|
---|
| 490 |
|
---|
| 491 | The JSON format is specified by :rfc:`4627`. This section details this
|
---|
| 492 | module's level of compliance with the RFC. For simplicity,
|
---|
| 493 | :class:`JSONEncoder` and :class:`JSONDecoder` subclasses, and parameters other
|
---|
| 494 | than those explicitly mentioned, are not considered.
|
---|
| 495 |
|
---|
| 496 | This module does not comply with the RFC in a strict fashion, implementing some
|
---|
| 497 | extensions that are valid JavaScript but not valid JSON. In particular:
|
---|
| 498 |
|
---|
| 499 | - Top-level non-object, non-array values are accepted and output;
|
---|
| 500 | - Infinite and NaN number values are accepted and output;
|
---|
| 501 | - Repeated names within an object are accepted, and only the value of the last
|
---|
| 502 | name-value pair is used.
|
---|
| 503 |
|
---|
| 504 | Since the RFC permits RFC-compliant parsers to accept input texts that are not
|
---|
| 505 | RFC-compliant, this module's deserializer is technically RFC-compliant under
|
---|
| 506 | default settings.
|
---|
| 507 |
|
---|
| 508 | Character Encodings
|
---|
| 509 | ^^^^^^^^^^^^^^^^^^^
|
---|
| 510 |
|
---|
| 511 | The RFC recommends that JSON be represented using either UTF-8, UTF-16, or
|
---|
| 512 | UTF-32, with UTF-8 being the default. Accordingly, this module uses UTF-8 as
|
---|
| 513 | the default for its *encoding* parameter.
|
---|
| 514 |
|
---|
| 515 | This module's deserializer only directly works with ASCII-compatible encodings;
|
---|
| 516 | UTF-16, UTF-32, and other ASCII-incompatible encodings require the use of
|
---|
| 517 | workarounds described in the documentation for the deserializer's *encoding*
|
---|
| 518 | parameter.
|
---|
| 519 |
|
---|
| 520 | The RFC also non-normatively describes a limited encoding detection technique
|
---|
| 521 | for JSON texts; this module's deserializer does not implement this or any other
|
---|
| 522 | kind of encoding detection.
|
---|
| 523 |
|
---|
| 524 | As permitted, though not required, by the RFC, this module's serializer sets
|
---|
| 525 | *ensure_ascii=True* by default, thus escaping the output so that the resulting
|
---|
| 526 | strings only contain ASCII characters.
|
---|
| 527 |
|
---|
| 528 |
|
---|
| 529 | Top-level Non-Object, Non-Array Values
|
---|
| 530 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
---|
| 531 |
|
---|
| 532 | The RFC specifies that the top-level value of a JSON text must be either a
|
---|
| 533 | JSON object or array (Python :class:`dict` or :class:`list`). This module's
|
---|
| 534 | deserializer also accepts input texts consisting solely of a
|
---|
| 535 | JSON null, boolean, number, or string value::
|
---|
| 536 |
|
---|
| 537 | >>> just_a_json_string = '"spam and eggs"' # Not by itself a valid JSON text
|
---|
| 538 | >>> json.loads(just_a_json_string)
|
---|
| 539 | u'spam and eggs'
|
---|
| 540 |
|
---|
| 541 | This module itself does not include a way to request that such input texts be
|
---|
| 542 | regarded as illegal. Likewise, this module's serializer also accepts single
|
---|
| 543 | Python :data:`None`, :class:`bool`, numeric, and :class:`str`
|
---|
| 544 | values as input and will generate output texts consisting solely of a top-level
|
---|
| 545 | JSON null, boolean, number, or string value without raising an exception::
|
---|
| 546 |
|
---|
| 547 | >>> neither_a_list_nor_a_dict = u"spam and eggs"
|
---|
| 548 | >>> json.dumps(neither_a_list_nor_a_dict) # The result is not a valid JSON text
|
---|
| 549 | '"spam and eggs"'
|
---|
| 550 |
|
---|
| 551 | This module's serializer does not itself include a way to enforce the
|
---|
| 552 | aforementioned constraint.
|
---|
| 553 |
|
---|
| 554 |
|
---|
| 555 | Infinite and NaN Number Values
|
---|
| 556 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
---|
| 557 |
|
---|
| 558 | The RFC does not permit the representation of infinite or NaN number values.
|
---|
| 559 | Despite that, by default, this module accepts and outputs ``Infinity``,
|
---|
| 560 | ``-Infinity``, and ``NaN`` as if they were valid JSON number literal values::
|
---|
| 561 |
|
---|
| 562 | >>> # Neither of these calls raises an exception, but the results are not valid JSON
|
---|
| 563 | >>> json.dumps(float('-inf'))
|
---|
| 564 | '-Infinity'
|
---|
| 565 | >>> json.dumps(float('nan'))
|
---|
| 566 | 'NaN'
|
---|
| 567 | >>> # Same when deserializing
|
---|
| 568 | >>> json.loads('-Infinity')
|
---|
| 569 | -inf
|
---|
| 570 | >>> json.loads('NaN')
|
---|
| 571 | nan
|
---|
| 572 |
|
---|
| 573 | In the serializer, the *allow_nan* parameter can be used to alter this
|
---|
| 574 | behavior. In the deserializer, the *parse_constant* parameter can be used to
|
---|
| 575 | alter this behavior.
|
---|
| 576 |
|
---|
| 577 |
|
---|
| 578 | Repeated Names Within an Object
|
---|
| 579 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
---|
| 580 |
|
---|
| 581 | The RFC specifies that the names within a JSON object should be unique, but
|
---|
| 582 | does not specify how repeated names in JSON objects should be handled. By
|
---|
| 583 | default, this module does not raise an exception; instead, it ignores all but
|
---|
| 584 | the last name-value pair for a given name::
|
---|
| 585 |
|
---|
| 586 | >>> weird_json = '{"x": 1, "x": 2, "x": 3}'
|
---|
| 587 | >>> json.loads(weird_json)
|
---|
| 588 | {u'x': 3}
|
---|
| 589 |
|
---|
| 590 | The *object_pairs_hook* parameter can be used to alter this behavior.
|
---|