1:mod:`json` --- JSON encoder and decoder 2======================================== 3 4.. module:: json 5 :synopsis: Encode and decode the JSON format. 6 7.. moduleauthor:: Bob Ippolito <bob@redivi.com> 8.. sectionauthor:: Bob Ippolito <bob@redivi.com> 9 10**Source code:** :source:`Lib/json/__init__.py` 11 12-------------- 13 14`JSON (JavaScript Object Notation) <http://json.org>`_, specified by 15:rfc:`7159` (which obsoletes :rfc:`4627`) and by 16`ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_, 17is a lightweight data interchange format inspired by 18`JavaScript <https://en.wikipedia.org/wiki/JavaScript>`_ object literal syntax 19(although it is not a strict subset of JavaScript [#rfc-errata]_ ). 20 21:mod:`json` exposes an API familiar to users of the standard library 22:mod:`marshal` and :mod:`pickle` modules. 23 24Encoding basic Python object hierarchies:: 25 26 >>> import json 27 >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) 28 '["foo", {"bar": ["baz", null, 1.0, 2]}]' 29 >>> print(json.dumps("\"foo\bar")) 30 "\"foo\bar" 31 >>> print(json.dumps('\u1234')) 32 "\u1234" 33 >>> print(json.dumps('\\')) 34 "\\" 35 >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)) 36 {"a": 0, "b": 0, "c": 0} 37 >>> from io import StringIO 38 >>> io = StringIO() 39 >>> json.dump(['streaming API'], io) 40 >>> io.getvalue() 41 '["streaming API"]' 42 43Compact encoding:: 44 45 >>> import json 46 >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) 47 '[1,2,3,{"4":5,"6":7}]' 48 49Pretty printing:: 50 51 >>> import json 52 >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) 53 { 54 "4": 5, 55 "6": 7 56 } 57 58Decoding JSON:: 59 60 >>> import json 61 >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') 62 ['foo', {'bar': ['baz', None, 1.0, 2]}] 63 >>> json.loads('"\\"foo\\bar"') 64 '"foo\x08ar' 65 >>> from io import StringIO 66 >>> io = StringIO('["streaming API"]') 67 >>> json.load(io) 68 ['streaming API'] 69 70Specializing JSON object decoding:: 71 72 >>> import json 73 >>> def as_complex(dct): 74 ... if '__complex__' in dct: 75 ... return complex(dct['real'], dct['imag']) 76 ... return dct 77 ... 78 >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', 79 ... object_hook=as_complex) 80 (1+2j) 81 >>> import decimal 82 >>> json.loads('1.1', parse_float=decimal.Decimal) 83 Decimal('1.1') 84 85Extending :class:`JSONEncoder`:: 86 87 >>> import json 88 >>> class ComplexEncoder(json.JSONEncoder): 89 ... def default(self, obj): 90 ... if isinstance(obj, complex): 91 ... return [obj.real, obj.imag] 92 ... # Let the base class default method raise the TypeError 93 ... return json.JSONEncoder.default(self, obj) 94 ... 95 >>> json.dumps(2 + 1j, cls=ComplexEncoder) 96 '[2.0, 1.0]' 97 >>> ComplexEncoder().encode(2 + 1j) 98 '[2.0, 1.0]' 99 >>> list(ComplexEncoder().iterencode(2 + 1j)) 100 ['[2.0', ', 1.0', ']'] 101 102 103Using :mod:`json.tool` from the shell to validate and pretty-print: 104 105.. code-block:: shell-session 106 107 $ echo '{"json":"obj"}' | python -m json.tool 108 { 109 "json": "obj" 110 } 111 $ echo '{1.2:3.4}' | python -m json.tool 112 Expecting property name enclosed in double quotes: line 1 column 2 (char 1) 113 114See :ref:`json-commandline` for detailed documentation. 115 116.. note:: 117 118 JSON is a subset of `YAML <http://yaml.org/>`_ 1.2. The JSON produced by 119 this module's default settings (in particular, the default *separators* 120 value) is also a subset of YAML 1.0 and 1.1. This module can thus also be 121 used as a YAML serializer. 122 123 124Basic Usage 125----------- 126 127.. function:: dump(obj, fp, *, skipkeys=False, ensure_ascii=True, \ 128 check_circular=True, allow_nan=True, cls=None, \ 129 indent=None, separators=None, default=None, \ 130 sort_keys=False, **kw) 131 132 Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting 133 :term:`file-like object`) using this :ref:`conversion table 134 <py-to-json-table>`. 135 136 If *skipkeys* is true (default: ``False``), then dict keys that are not 137 of a basic type (:class:`str`, :class:`int`, :class:`float`, :class:`bool`, 138 ``None``) will be skipped instead of raising a :exc:`TypeError`. 139 140 The :mod:`json` module always produces :class:`str` objects, not 141 :class:`bytes` objects. Therefore, ``fp.write()`` must support :class:`str` 142 input. 143 144 If *ensure_ascii* is true (the default), the output is guaranteed to 145 have all incoming non-ASCII characters escaped. If *ensure_ascii* is 146 false, these characters will be output as-is. 147 148 If *check_circular* is false (default: ``True``), then the circular 149 reference check for container types will be skipped and a circular reference 150 will result in an :exc:`OverflowError` (or worse). 151 152 If *allow_nan* is false (default: ``True``), then it will be a 153 :exc:`ValueError` to serialize out of range :class:`float` values (``nan``, 154 ``inf``, ``-inf``) in strict compliance of the JSON specification. 155 If *allow_nan* is true, their JavaScript equivalents (``NaN``, 156 ``Infinity``, ``-Infinity``) will be used. 157 158 If *indent* is a non-negative integer or string, then JSON array elements and 159 object members will be pretty-printed with that indent level. An indent level 160 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default) 161 selects the most compact representation. Using a positive integer indent 162 indents that many spaces per level. If *indent* is a string (such as ``"\t"``), 163 that string is used to indent each level. 164 165 .. versionchanged:: 3.2 166 Allow strings for *indent* in addition to integers. 167 168 If specified, *separators* should be an ``(item_separator, key_separator)`` 169 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and 170 ``(',', ': ')`` otherwise. To get the most compact JSON representation, 171 you should specify ``(',', ':')`` to eliminate whitespace. 172 173 .. versionchanged:: 3.4 174 Use ``(',', ': ')`` as default if *indent* is not ``None``. 175 176 If specified, *default* should be a function that gets called for objects that 177 can't otherwise be serialized. It should return a JSON encodable version of 178 the object or raise a :exc:`TypeError`. If not specified, :exc:`TypeError` 179 is raised. 180 181 If *sort_keys* is true (default: ``False``), then the output of 182 dictionaries will be sorted by key. 183 184 To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the 185 :meth:`default` method to serialize additional types), specify it with the 186 *cls* kwarg; otherwise :class:`JSONEncoder` is used. 187 188 .. versionchanged:: 3.6 189 All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`. 190 191 .. note:: 192 193 Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol, 194 so trying to serialize multiple objects with repeated calls to 195 :func:`dump` using the same *fp* will result in an invalid JSON file. 196 197.. function:: dumps(obj, *, skipkeys=False, ensure_ascii=True, \ 198 check_circular=True, allow_nan=True, cls=None, \ 199 indent=None, separators=None, default=None, \ 200 sort_keys=False, **kw) 201 202 Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion 203 table <py-to-json-table>`. The arguments have the same meaning as in 204 :func:`dump`. 205 206 .. note:: 207 208 Keys in key/value pairs of JSON are always of the type :class:`str`. When 209 a dictionary is converted into JSON, all the keys of the dictionary are 210 coerced to strings. As a result of this, if a dictionary is converted 211 into JSON and then back into a dictionary, the dictionary may not equal 212 the original one. That is, ``loads(dumps(x)) != x`` if x has non-string 213 keys. 214 215.. function:: load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) 216 217 Deserialize *fp* (a ``.read()``-supporting :term:`text file` or 218 :term:`binary file` containing a JSON document) to a Python object using 219 this :ref:`conversion table <json-to-py-table>`. 220 221 *object_hook* is an optional function that will be called with the result of 222 any object literal decoded (a :class:`dict`). The return value of 223 *object_hook* will be used instead of the :class:`dict`. This feature can be used 224 to implement custom decoders (e.g. `JSON-RPC <http://www.jsonrpc.org>`_ 225 class hinting). 226 227 *object_pairs_hook* is an optional function that will be called with the 228 result of any object literal decoded with an ordered list of pairs. The 229 return value of *object_pairs_hook* will be used instead of the 230 :class:`dict`. This feature can be used to implement custom decoders. 231 If *object_hook* is also defined, the *object_pairs_hook* takes priority. 232 233 .. versionchanged:: 3.1 234 Added support for *object_pairs_hook*. 235 236 *parse_float*, if specified, will be called with the string of every JSON 237 float to be decoded. By default, this is equivalent to ``float(num_str)``. 238 This can be used to use another datatype or parser for JSON floats 239 (e.g. :class:`decimal.Decimal`). 240 241 *parse_int*, if specified, will be called with the string of every JSON int 242 to be decoded. By default, this is equivalent to ``int(num_str)``. This can 243 be used to use another datatype or parser for JSON integers 244 (e.g. :class:`float`). 245 246 *parse_constant*, if specified, will be called with one of the following 247 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. 248 This can be used to raise an exception if invalid JSON numbers 249 are encountered. 250 251 .. versionchanged:: 3.1 252 *parse_constant* doesn't get called on 'null', 'true', 'false' anymore. 253 254 To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls`` 255 kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments 256 will be passed to the constructor of the class. 257 258 If the data being deserialized is not a valid JSON document, a 259 :exc:`JSONDecodeError` will be raised. 260 261 .. versionchanged:: 3.6 262 All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`. 263 264 .. versionchanged:: 3.6 265 *fp* can now be a :term:`binary file`. The input encoding should be 266 UTF-8, UTF-16 or UTF-32. 267 268.. function:: loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) 269 270 Deserialize *s* (a :class:`str`, :class:`bytes` or :class:`bytearray` 271 instance containing a JSON document) to a Python object using this 272 :ref:`conversion table <json-to-py-table>`. 273 274 The other arguments have the same meaning as in :func:`load`, except 275 *encoding* which is ignored and deprecated. 276 277 If the data being deserialized is not a valid JSON document, a 278 :exc:`JSONDecodeError` will be raised. 279 280 .. versionchanged:: 3.6 281 *s* can now be of type :class:`bytes` or :class:`bytearray`. The 282 input encoding should be UTF-8, UTF-16 or UTF-32. 283 284 285Encoders and Decoders 286--------------------- 287 288.. class:: JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None) 289 290 Simple JSON decoder. 291 292 Performs the following translations in decoding by default: 293 294 .. _json-to-py-table: 295 296 +---------------+-------------------+ 297 | JSON | Python | 298 +===============+===================+ 299 | object | dict | 300 +---------------+-------------------+ 301 | array | list | 302 +---------------+-------------------+ 303 | string | str | 304 +---------------+-------------------+ 305 | number (int) | int | 306 +---------------+-------------------+ 307 | number (real) | float | 308 +---------------+-------------------+ 309 | true | True | 310 +---------------+-------------------+ 311 | false | False | 312 +---------------+-------------------+ 313 | null | None | 314 +---------------+-------------------+ 315 316 It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their 317 corresponding ``float`` values, which is outside the JSON spec. 318 319 *object_hook*, if specified, will be called with the result of every JSON 320 object decoded and its return value will be used in place of the given 321 :class:`dict`. This can be used to provide custom deserializations (e.g. to 322 support JSON-RPC class hinting). 323 324 *object_pairs_hook*, if specified will be called with the result of every 325 JSON object decoded with an ordered list of pairs. The return value of 326 *object_pairs_hook* will be used instead of the :class:`dict`. This 327 feature can be used to implement custom decoders. If *object_hook* is also 328 defined, the *object_pairs_hook* takes priority. 329 330 .. versionchanged:: 3.1 331 Added support for *object_pairs_hook*. 332 333 *parse_float*, if specified, will be called with the string of every JSON 334 float to be decoded. By default, this is equivalent to ``float(num_str)``. 335 This can be used to use another datatype or parser for JSON floats 336 (e.g. :class:`decimal.Decimal`). 337 338 *parse_int*, if specified, will be called with the string of every JSON int 339 to be decoded. By default, this is equivalent to ``int(num_str)``. This can 340 be used to use another datatype or parser for JSON integers 341 (e.g. :class:`float`). 342 343 *parse_constant*, if specified, will be called with one of the following 344 strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. 345 This can be used to raise an exception if invalid JSON numbers 346 are encountered. 347 348 If *strict* is false (``True`` is the default), then control characters 349 will be allowed inside strings. Control characters in this context are 350 those with character codes in the 0--31 range, including ``'\t'`` (tab), 351 ``'\n'``, ``'\r'`` and ``'\0'``. 352 353 If the data being deserialized is not a valid JSON document, a 354 :exc:`JSONDecodeError` will be raised. 355 356 .. versionchanged:: 3.6 357 All parameters are now :ref:`keyword-only <keyword-only_parameter>`. 358 359 .. method:: decode(s) 360 361 Return the Python representation of *s* (a :class:`str` instance 362 containing a JSON document). 363 364 :exc:`JSONDecodeError` will be raised if the given JSON document is not 365 valid. 366 367 .. method:: raw_decode(s) 368 369 Decode a JSON document from *s* (a :class:`str` beginning with a 370 JSON document) and return a 2-tuple of the Python representation 371 and the index in *s* where the document ended. 372 373 This can be used to decode a JSON document from a string that may have 374 extraneous data at the end. 375 376 377.. class:: JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None) 378 379 Extensible JSON encoder for Python data structures. 380 381 Supports the following objects and types by default: 382 383 .. _py-to-json-table: 384 385 +----------------------------------------+---------------+ 386 | Python | JSON | 387 +========================================+===============+ 388 | dict | object | 389 +----------------------------------------+---------------+ 390 | list, tuple | array | 391 +----------------------------------------+---------------+ 392 | str | string | 393 +----------------------------------------+---------------+ 394 | int, float, int- & float-derived Enums | number | 395 +----------------------------------------+---------------+ 396 | True | true | 397 +----------------------------------------+---------------+ 398 | False | false | 399 +----------------------------------------+---------------+ 400 | None | null | 401 +----------------------------------------+---------------+ 402 403 .. versionchanged:: 3.4 404 Added support for int- and float-derived Enum classes. 405 406 To extend this to recognize other objects, subclass and implement a 407 :meth:`default` method with another method that returns a serializable object 408 for ``o`` if possible, otherwise it should call the superclass implementation 409 (to raise :exc:`TypeError`). 410 411 If *skipkeys* is false (the default), then it is a :exc:`TypeError` to 412 attempt encoding of keys that are not :class:`str`, :class:`int`, 413 :class:`float` or ``None``. If *skipkeys* is true, such items are simply 414 skipped. 415 416 If *ensure_ascii* is true (the default), the output is guaranteed to 417 have all incoming non-ASCII characters escaped. If *ensure_ascii* is 418 false, these characters will be output as-is. 419 420 If *check_circular* is true (the default), then lists, dicts, and custom 421 encoded objects will be checked for circular references during encoding to 422 prevent an infinite recursion (which would cause an :exc:`OverflowError`). 423 Otherwise, no such check takes place. 424 425 If *allow_nan* is true (the default), then ``NaN``, ``Infinity``, and 426 ``-Infinity`` will be encoded as such. This behavior is not JSON 427 specification compliant, but is consistent with most JavaScript based 428 encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode 429 such floats. 430 431 If *sort_keys* is true (default: ``False``), then the output of dictionaries 432 will be sorted by key; this is useful for regression tests to ensure that 433 JSON serializations can be compared on a day-to-day basis. 434 435 If *indent* is a non-negative integer or string, then JSON array elements and 436 object members will be pretty-printed with that indent level. An indent level 437 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default) 438 selects the most compact representation. Using a positive integer indent 439 indents that many spaces per level. If *indent* is a string (such as ``"\t"``), 440 that string is used to indent each level. 441 442 .. versionchanged:: 3.2 443 Allow strings for *indent* in addition to integers. 444 445 If specified, *separators* should be an ``(item_separator, key_separator)`` 446 tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and 447 ``(',', ': ')`` otherwise. To get the most compact JSON representation, 448 you should specify ``(',', ':')`` to eliminate whitespace. 449 450 .. versionchanged:: 3.4 451 Use ``(',', ': ')`` as default if *indent* is not ``None``. 452 453 If specified, *default* should be a function that gets called for objects that 454 can't otherwise be serialized. It should return a JSON encodable version of 455 the object or raise a :exc:`TypeError`. If not specified, :exc:`TypeError` 456 is raised. 457 458 .. versionchanged:: 3.6 459 All parameters are now :ref:`keyword-only <keyword-only_parameter>`. 460 461 462 .. method:: default(o) 463 464 Implement this method in a subclass such that it returns a serializable 465 object for *o*, or calls the base implementation (to raise a 466 :exc:`TypeError`). 467 468 For example, to support arbitrary iterators, you could implement default 469 like this:: 470 471 def default(self, o): 472 try: 473 iterable = iter(o) 474 except TypeError: 475 pass 476 else: 477 return list(iterable) 478 # Let the base class default method raise the TypeError 479 return json.JSONEncoder.default(self, o) 480 481 482 .. method:: encode(o) 483 484 Return a JSON string representation of a Python data structure, *o*. For 485 example:: 486 487 >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]}) 488 '{"foo": ["bar", "baz"]}' 489 490 491 .. method:: iterencode(o) 492 493 Encode the given object, *o*, and yield each string representation as 494 available. For example:: 495 496 for chunk in json.JSONEncoder().iterencode(bigobject): 497 mysocket.write(chunk) 498 499 500Exceptions 501---------- 502 503.. exception:: JSONDecodeError(msg, doc, pos) 504 505 Subclass of :exc:`ValueError` with the following additional attributes: 506 507 .. attribute:: msg 508 509 The unformatted error message. 510 511 .. attribute:: doc 512 513 The JSON document being parsed. 514 515 .. attribute:: pos 516 517 The start index of *doc* where parsing failed. 518 519 .. attribute:: lineno 520 521 The line corresponding to *pos*. 522 523 .. attribute:: colno 524 525 The column corresponding to *pos*. 526 527 .. versionadded:: 3.5 528 529 530Standard Compliance and Interoperability 531---------------------------------------- 532 533The JSON format is specified by :rfc:`7159` and by 534`ECMA-404 <http://www.ecma-international.org/publications/standards/Ecma-404.htm>`_. 535This section details this module's level of compliance with the RFC. 536For simplicity, :class:`JSONEncoder` and :class:`JSONDecoder` subclasses, and 537parameters other than those explicitly mentioned, are not considered. 538 539This module does not comply with the RFC in a strict fashion, implementing some 540extensions that are valid JavaScript but not valid JSON. In particular: 541 542- Infinite and NaN number values are accepted and output; 543- Repeated names within an object are accepted, and only the value of the last 544 name-value pair is used. 545 546Since the RFC permits RFC-compliant parsers to accept input texts that are not 547RFC-compliant, this module's deserializer is technically RFC-compliant under 548default settings. 549 550Character Encodings 551^^^^^^^^^^^^^^^^^^^ 552 553The RFC requires that JSON be represented using either UTF-8, UTF-16, or 554UTF-32, with UTF-8 being the recommended default for maximum interoperability. 555 556As permitted, though not required, by the RFC, this module's serializer sets 557*ensure_ascii=True* by default, thus escaping the output so that the resulting 558strings only contain ASCII characters. 559 560Other than the *ensure_ascii* parameter, this module is defined strictly in 561terms of conversion between Python objects and 562:class:`Unicode strings <str>`, and thus does not otherwise directly address 563the issue of character encodings. 564 565The RFC prohibits adding a byte order mark (BOM) to the start of a JSON text, 566and this module's serializer does not add a BOM to its output. 567The RFC permits, but does not require, JSON deserializers to ignore an initial 568BOM in their input. This module's deserializer raises a :exc:`ValueError` 569when an initial BOM is present. 570 571The RFC does not explicitly forbid JSON strings which contain byte sequences 572that don't correspond to valid Unicode characters (e.g. unpaired UTF-16 573surrogates), but it does note that they may cause interoperability problems. 574By default, this module accepts and outputs (when present in the original 575:class:`str`) code points for such sequences. 576 577 578Infinite and NaN Number Values 579^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 580 581The RFC does not permit the representation of infinite or NaN number values. 582Despite that, by default, this module accepts and outputs ``Infinity``, 583``-Infinity``, and ``NaN`` as if they were valid JSON number literal values:: 584 585 >>> # Neither of these calls raises an exception, but the results are not valid JSON 586 >>> json.dumps(float('-inf')) 587 '-Infinity' 588 >>> json.dumps(float('nan')) 589 'NaN' 590 >>> # Same when deserializing 591 >>> json.loads('-Infinity') 592 -inf 593 >>> json.loads('NaN') 594 nan 595 596In the serializer, the *allow_nan* parameter can be used to alter this 597behavior. In the deserializer, the *parse_constant* parameter can be used to 598alter this behavior. 599 600 601Repeated Names Within an Object 602^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 603 604The RFC specifies that the names within a JSON object should be unique, but 605does not mandate how repeated names in JSON objects should be handled. By 606default, this module does not raise an exception; instead, it ignores all but 607the last name-value pair for a given name:: 608 609 >>> weird_json = '{"x": 1, "x": 2, "x": 3}' 610 >>> json.loads(weird_json) 611 {'x': 3} 612 613The *object_pairs_hook* parameter can be used to alter this behavior. 614 615 616Top-level Non-Object, Non-Array Values 617^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 618 619The old version of JSON specified by the obsolete :rfc:`4627` required that 620the top-level value of a JSON text must be either a JSON object or array 621(Python :class:`dict` or :class:`list`), and could not be a JSON null, 622boolean, number, or string value. :rfc:`7159` removed that restriction, and 623this module does not and has never implemented that restriction in either its 624serializer or its deserializer. 625 626Regardless, for maximum interoperability, you may wish to voluntarily adhere 627to the restriction yourself. 628 629 630Implementation Limitations 631^^^^^^^^^^^^^^^^^^^^^^^^^^ 632 633Some JSON deserializer implementations may set limits on: 634 635* the size of accepted JSON texts 636* the maximum level of nesting of JSON objects and arrays 637* the range and precision of JSON numbers 638* the content and maximum length of JSON strings 639 640This module does not impose any such limits beyond those of the relevant 641Python datatypes themselves or the Python interpreter itself. 642 643When serializing to JSON, beware any such limitations in applications that may 644consume your JSON. In particular, it is common for JSON numbers to be 645deserialized into IEEE 754 double precision numbers and thus subject to that 646representation's range and precision limitations. This is especially relevant 647when serializing Python :class:`int` values of extremely large magnitude, or 648when serializing instances of "exotic" numerical types such as 649:class:`decimal.Decimal`. 650 651 652.. _json-commandline: 653.. program:: json.tool 654 655Command Line Interface 656---------------------- 657 658.. module:: json.tool 659 :synopsis: A command line to validate and pretty-print JSON. 660 661**Source code:** :source:`Lib/json/tool.py` 662 663-------------- 664 665The :mod:`json.tool` module provides a simple command line interface to validate 666and pretty-print JSON objects. 667 668If the optional ``infile`` and ``outfile`` arguments are not 669specified, :attr:`sys.stdin` and :attr:`sys.stdout` will be used respectively: 670 671.. code-block:: shell-session 672 673 $ echo '{"json": "obj"}' | python -m json.tool 674 { 675 "json": "obj" 676 } 677 $ echo '{1.2:3.4}' | python -m json.tool 678 Expecting property name enclosed in double quotes: line 1 column 2 (char 1) 679 680.. versionchanged:: 3.5 681 The output is now in the same order as the input. Use the 682 :option:`--sort-keys` option to sort the output of dictionaries 683 alphabetically by key. 684 685 686Command line options 687^^^^^^^^^^^^^^^^^^^^ 688 689.. cmdoption:: infile 690 691 The JSON file to be validated or pretty-printed: 692 693 .. code-block:: shell-session 694 695 $ python -m json.tool mp_films.json 696 [ 697 { 698 "title": "And Now for Something Completely Different", 699 "year": 1971 700 }, 701 { 702 "title": "Monty Python and the Holy Grail", 703 "year": 1975 704 } 705 ] 706 707 If *infile* is not specified, read from :attr:`sys.stdin`. 708 709.. cmdoption:: outfile 710 711 Write the output of the *infile* to the given *outfile*. Otherwise, write it 712 to :attr:`sys.stdout`. 713 714.. cmdoption:: --sort-keys 715 716 Sort the output of dictionaries alphabetically by key. 717 718 .. versionadded:: 3.5 719 720.. cmdoption:: -h, --help 721 722 Show the help message. 723 724 725.. rubric:: Footnotes 726 727.. [#rfc-errata] As noted in `the errata for RFC 7159 728 <https://www.rfc-editor.org/errata_search.php?rfc=7159>`_, 729 JSON permits literal U+2028 (LINE SEPARATOR) and 730 U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript 731 (as of ECMAScript Edition 5.1) does not. 732