17db96d56Sopenharmony_ci:mod:`json` --- JSON encoder and decoder 27db96d56Sopenharmony_ci======================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: json 57db96d56Sopenharmony_ci :synopsis: Encode and decode the JSON format. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: Bob Ippolito <bob@redivi.com> 87db96d56Sopenharmony_ci.. sectionauthor:: Bob Ippolito <bob@redivi.com> 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/json/__init__.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci-------------- 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci`JSON (JavaScript Object Notation) <https://json.org>`_, specified by 157db96d56Sopenharmony_ci:rfc:`7159` (which obsoletes :rfc:`4627`) and by 167db96d56Sopenharmony_ci`ECMA-404 <https://www.ecma-international.org/publications-and-standards/standards/ecma-404/>`_, 177db96d56Sopenharmony_ciis a lightweight data interchange format inspired by 187db96d56Sopenharmony_ci`JavaScript <https://en.wikipedia.org/wiki/JavaScript>`_ object literal syntax 197db96d56Sopenharmony_ci(although it is not a strict subset of JavaScript [#rfc-errata]_ ). 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci.. warning:: 227db96d56Sopenharmony_ci Be cautious when parsing JSON data from untrusted sources. A malicious 237db96d56Sopenharmony_ci JSON string may cause the decoder to consume considerable CPU and memory 247db96d56Sopenharmony_ci resources. Limiting the size of data to be parsed is recommended. 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci:mod:`json` exposes an API familiar to users of the standard library 277db96d56Sopenharmony_ci:mod:`marshal` and :mod:`pickle` modules. 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ciEncoding basic Python object hierarchies:: 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci >>> import json 327db96d56Sopenharmony_ci >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) 337db96d56Sopenharmony_ci '["foo", {"bar": ["baz", null, 1.0, 2]}]' 347db96d56Sopenharmony_ci >>> print(json.dumps("\"foo\bar")) 357db96d56Sopenharmony_ci "\"foo\bar" 367db96d56Sopenharmony_ci >>> print(json.dumps('\u1234')) 377db96d56Sopenharmony_ci "\u1234" 387db96d56Sopenharmony_ci >>> print(json.dumps('\\')) 397db96d56Sopenharmony_ci "\\" 407db96d56Sopenharmony_ci >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)) 417db96d56Sopenharmony_ci {"a": 0, "b": 0, "c": 0} 427db96d56Sopenharmony_ci >>> from io import StringIO 437db96d56Sopenharmony_ci >>> io = StringIO() 447db96d56Sopenharmony_ci >>> json.dump(['streaming API'], io) 457db96d56Sopenharmony_ci >>> io.getvalue() 467db96d56Sopenharmony_ci '["streaming API"]' 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ciCompact encoding:: 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci >>> import json 517db96d56Sopenharmony_ci >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) 527db96d56Sopenharmony_ci '[1,2,3,{"4":5,"6":7}]' 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ciPretty printing:: 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci >>> import json 577db96d56Sopenharmony_ci >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) 587db96d56Sopenharmony_ci { 597db96d56Sopenharmony_ci "4": 5, 607db96d56Sopenharmony_ci "6": 7 617db96d56Sopenharmony_ci } 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ciDecoding JSON:: 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci >>> import json 667db96d56Sopenharmony_ci >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') 677db96d56Sopenharmony_ci ['foo', {'bar': ['baz', None, 1.0, 2]}] 687db96d56Sopenharmony_ci >>> json.loads('"\\"foo\\bar"') 697db96d56Sopenharmony_ci '"foo\x08ar' 707db96d56Sopenharmony_ci >>> from io import StringIO 717db96d56Sopenharmony_ci >>> io = StringIO('["streaming API"]') 727db96d56Sopenharmony_ci >>> json.load(io) 737db96d56Sopenharmony_ci ['streaming API'] 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ciSpecializing JSON object decoding:: 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci >>> import json 787db96d56Sopenharmony_ci >>> def as_complex(dct): 797db96d56Sopenharmony_ci ... if '__complex__' in dct: 807db96d56Sopenharmony_ci ... return complex(dct['real'], dct['imag']) 817db96d56Sopenharmony_ci ... return dct 827db96d56Sopenharmony_ci ... 837db96d56Sopenharmony_ci >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', 847db96d56Sopenharmony_ci ... object_hook=as_complex) 857db96d56Sopenharmony_ci (1+2j) 867db96d56Sopenharmony_ci >>> import decimal 877db96d56Sopenharmony_ci >>> json.loads('1.1', parse_float=decimal.Decimal) 887db96d56Sopenharmony_ci Decimal('1.1') 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ciExtending :class:`JSONEncoder`:: 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci >>> import json 937db96d56Sopenharmony_ci >>> class ComplexEncoder(json.JSONEncoder): 947db96d56Sopenharmony_ci ... def default(self, obj): 957db96d56Sopenharmony_ci ... if isinstance(obj, complex): 967db96d56Sopenharmony_ci ... return [obj.real, obj.imag] 977db96d56Sopenharmony_ci ... # Let the base class default method raise the TypeError 987db96d56Sopenharmony_ci ... return json.JSONEncoder.default(self, obj) 997db96d56Sopenharmony_ci ... 1007db96d56Sopenharmony_ci >>> json.dumps(2 + 1j, cls=ComplexEncoder) 1017db96d56Sopenharmony_ci '[2.0, 1.0]' 1027db96d56Sopenharmony_ci >>> ComplexEncoder().encode(2 + 1j) 1037db96d56Sopenharmony_ci '[2.0, 1.0]' 1047db96d56Sopenharmony_ci >>> list(ComplexEncoder().iterencode(2 + 1j)) 1057db96d56Sopenharmony_ci ['[2.0', ', 1.0', ']'] 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ciUsing :mod:`json.tool` from the shell to validate and pretty-print: 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ci.. code-block:: shell-session 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci $ echo '{"json":"obj"}' | python -m json.tool 1137db96d56Sopenharmony_ci { 1147db96d56Sopenharmony_ci "json": "obj" 1157db96d56Sopenharmony_ci } 1167db96d56Sopenharmony_ci $ echo '{1.2:3.4}' | python -m json.tool 1177db96d56Sopenharmony_ci Expecting property name enclosed in double quotes: line 1 column 2 (char 1) 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ciSee :ref:`json-commandline` for detailed documentation. 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci.. note:: 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci JSON is a subset of `YAML <https://yaml.org/>`_ 1.2. The JSON produced by 1247db96d56Sopenharmony_ci this module's default settings (in particular, the default *separators* 1257db96d56Sopenharmony_ci value) is also a subset of YAML 1.0 and 1.1. This module can thus also be 1267db96d56Sopenharmony_ci used as a YAML serializer. 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci.. note:: 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci This module's encoders and decoders preserve input and output order by 1317db96d56Sopenharmony_ci default. Order is only lost if the underlying containers are unordered. 1327db96d56Sopenharmony_ci 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ciBasic Usage 1357db96d56Sopenharmony_ci----------- 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci.. function:: dump(obj, fp, *, skipkeys=False, ensure_ascii=True, \ 1387db96d56Sopenharmony_ci check_circular=True, allow_nan=True, cls=None, \ 1397db96d56Sopenharmony_ci indent=None, separators=None, default=None, \ 1407db96d56Sopenharmony_ci sort_keys=False, **kw) 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting 1437db96d56Sopenharmony_ci :term:`file-like object`) using this :ref:`conversion table 1447db96d56Sopenharmony_ci <py-to-json-table>`. 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci If *skipkeys* is true (default: ``False``), then dict keys that are not 1477db96d56Sopenharmony_ci of a basic type (:class:`str`, :class:`int`, :class:`float`, :class:`bool`, 1487db96d56Sopenharmony_ci ``None``) will be skipped instead of raising a :exc:`TypeError`. 1497db96d56Sopenharmony_ci 1507db96d56Sopenharmony_ci The :mod:`json` module always produces :class:`str` objects, not 1517db96d56Sopenharmony_ci :class:`bytes` objects. Therefore, ``fp.write()`` must support :class:`str` 1527db96d56Sopenharmony_ci input. 1537db96d56Sopenharmony_ci 1547db96d56Sopenharmony_ci If *ensure_ascii* is true (the default), the output is guaranteed to 1557db96d56Sopenharmony_ci have all incoming non-ASCII characters escaped. If *ensure_ascii* is 1567db96d56Sopenharmony_ci false, these characters will be output as-is. 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci If *check_circular* is false (default: ``True``), then the circular 1597db96d56Sopenharmony_ci reference check for container types will be skipped and a circular reference 1607db96d56Sopenharmony_ci will result in a :exc:`RecursionError` (or worse). 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci If *allow_nan* is false (default: ``True``), then it will be a 1637db96d56Sopenharmony_ci :exc:`ValueError` to serialize out of range :class:`float` values (``nan``, 1647db96d56Sopenharmony_ci ``inf``, ``-inf``) in strict compliance of the JSON specification. 1657db96d56Sopenharmony_ci If *allow_nan* is true, their JavaScript equivalents (``NaN``, 1667db96d56Sopenharmony_ci ``Infinity``, ``-Infinity``) will be used. 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_ci If *indent* is a non-negative integer or string, then JSON array elements and 1697db96d56Sopenharmony_ci object members will be pretty-printed with that indent level. An indent level 1707db96d56Sopenharmony_ci of 0, negative, or ``""`` will only insert newlines. ``None`` (the default) 1717db96d56Sopenharmony_ci selects the most compact representation. Using a positive integer indent 1727db96d56Sopenharmony_ci indents that many spaces per level. If *indent* is a string (such as ``"\t"``), 1737db96d56Sopenharmony_ci that string is used to indent each level. 1747db96d56Sopenharmony_ci 1757db96d56Sopenharmony_ci .. versionchanged:: 3.2 1767db96d56Sopenharmony_ci Allow strings for *indent* in addition to integers. 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci If specified, *separators* should be an ``(item_separator, key_separator)`` 1797db96d56Sopenharmony_ci tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and 1807db96d56Sopenharmony_ci ``(',', ': ')`` otherwise. To get the most compact JSON representation, 1817db96d56Sopenharmony_ci you should specify ``(',', ':')`` to eliminate whitespace. 1827db96d56Sopenharmony_ci 1837db96d56Sopenharmony_ci .. versionchanged:: 3.4 1847db96d56Sopenharmony_ci Use ``(',', ': ')`` as default if *indent* is not ``None``. 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci If specified, *default* should be a function that gets called for objects that 1877db96d56Sopenharmony_ci can't otherwise be serialized. It should return a JSON encodable version of 1887db96d56Sopenharmony_ci the object or raise a :exc:`TypeError`. If not specified, :exc:`TypeError` 1897db96d56Sopenharmony_ci is raised. 1907db96d56Sopenharmony_ci 1917db96d56Sopenharmony_ci If *sort_keys* is true (default: ``False``), then the output of 1927db96d56Sopenharmony_ci dictionaries will be sorted by key. 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the 1957db96d56Sopenharmony_ci :meth:`default` method to serialize additional types), specify it with the 1967db96d56Sopenharmony_ci *cls* kwarg; otherwise :class:`JSONEncoder` is used. 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci .. versionchanged:: 3.6 1997db96d56Sopenharmony_ci All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`. 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci .. note:: 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ci Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol, 2047db96d56Sopenharmony_ci so trying to serialize multiple objects with repeated calls to 2057db96d56Sopenharmony_ci :func:`dump` using the same *fp* will result in an invalid JSON file. 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci.. function:: dumps(obj, *, skipkeys=False, ensure_ascii=True, \ 2087db96d56Sopenharmony_ci check_circular=True, allow_nan=True, cls=None, \ 2097db96d56Sopenharmony_ci indent=None, separators=None, default=None, \ 2107db96d56Sopenharmony_ci sort_keys=False, **kw) 2117db96d56Sopenharmony_ci 2127db96d56Sopenharmony_ci Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion 2137db96d56Sopenharmony_ci table <py-to-json-table>`. The arguments have the same meaning as in 2147db96d56Sopenharmony_ci :func:`dump`. 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci .. note:: 2177db96d56Sopenharmony_ci 2187db96d56Sopenharmony_ci Keys in key/value pairs of JSON are always of the type :class:`str`. When 2197db96d56Sopenharmony_ci a dictionary is converted into JSON, all the keys of the dictionary are 2207db96d56Sopenharmony_ci coerced to strings. As a result of this, if a dictionary is converted 2217db96d56Sopenharmony_ci into JSON and then back into a dictionary, the dictionary may not equal 2227db96d56Sopenharmony_ci the original one. That is, ``loads(dumps(x)) != x`` if x has non-string 2237db96d56Sopenharmony_ci keys. 2247db96d56Sopenharmony_ci 2257db96d56Sopenharmony_ci.. function:: load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) 2267db96d56Sopenharmony_ci 2277db96d56Sopenharmony_ci Deserialize *fp* (a ``.read()``-supporting :term:`text file` or 2287db96d56Sopenharmony_ci :term:`binary file` containing a JSON document) to a Python object using 2297db96d56Sopenharmony_ci this :ref:`conversion table <json-to-py-table>`. 2307db96d56Sopenharmony_ci 2317db96d56Sopenharmony_ci *object_hook* is an optional function that will be called with the result of 2327db96d56Sopenharmony_ci any object literal decoded (a :class:`dict`). The return value of 2337db96d56Sopenharmony_ci *object_hook* will be used instead of the :class:`dict`. This feature can be used 2347db96d56Sopenharmony_ci to implement custom decoders (e.g. `JSON-RPC <https://www.jsonrpc.org>`_ 2357db96d56Sopenharmony_ci class hinting). 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci *object_pairs_hook* is an optional function that will be called with the 2387db96d56Sopenharmony_ci result of any object literal decoded with an ordered list of pairs. The 2397db96d56Sopenharmony_ci return value of *object_pairs_hook* will be used instead of the 2407db96d56Sopenharmony_ci :class:`dict`. This feature can be used to implement custom decoders. 2417db96d56Sopenharmony_ci If *object_hook* is also defined, the *object_pairs_hook* takes priority. 2427db96d56Sopenharmony_ci 2437db96d56Sopenharmony_ci .. versionchanged:: 3.1 2447db96d56Sopenharmony_ci Added support for *object_pairs_hook*. 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci *parse_float*, if specified, will be called with the string of every JSON 2477db96d56Sopenharmony_ci float to be decoded. By default, this is equivalent to ``float(num_str)``. 2487db96d56Sopenharmony_ci This can be used to use another datatype or parser for JSON floats 2497db96d56Sopenharmony_ci (e.g. :class:`decimal.Decimal`). 2507db96d56Sopenharmony_ci 2517db96d56Sopenharmony_ci *parse_int*, if specified, will be called with the string of every JSON int 2527db96d56Sopenharmony_ci to be decoded. By default, this is equivalent to ``int(num_str)``. This can 2537db96d56Sopenharmony_ci be used to use another datatype or parser for JSON integers 2547db96d56Sopenharmony_ci (e.g. :class:`float`). 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ci .. versionchanged:: 3.11 2577db96d56Sopenharmony_ci The default *parse_int* of :func:`int` now limits the maximum length of 2587db96d56Sopenharmony_ci the integer string via the interpreter's :ref:`integer string 2597db96d56Sopenharmony_ci conversion length limitation <int_max_str_digits>` to help avoid denial 2607db96d56Sopenharmony_ci of service attacks. 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ci *parse_constant*, if specified, will be called with one of the following 2637db96d56Sopenharmony_ci strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. 2647db96d56Sopenharmony_ci This can be used to raise an exception if invalid JSON numbers 2657db96d56Sopenharmony_ci are encountered. 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ci .. versionchanged:: 3.1 2687db96d56Sopenharmony_ci *parse_constant* doesn't get called on 'null', 'true', 'false' anymore. 2697db96d56Sopenharmony_ci 2707db96d56Sopenharmony_ci To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls`` 2717db96d56Sopenharmony_ci kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments 2727db96d56Sopenharmony_ci will be passed to the constructor of the class. 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci If the data being deserialized is not a valid JSON document, a 2757db96d56Sopenharmony_ci :exc:`JSONDecodeError` will be raised. 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ci .. versionchanged:: 3.6 2787db96d56Sopenharmony_ci All optional parameters are now :ref:`keyword-only <keyword-only_parameter>`. 2797db96d56Sopenharmony_ci 2807db96d56Sopenharmony_ci .. versionchanged:: 3.6 2817db96d56Sopenharmony_ci *fp* can now be a :term:`binary file`. The input encoding should be 2827db96d56Sopenharmony_ci UTF-8, UTF-16 or UTF-32. 2837db96d56Sopenharmony_ci 2847db96d56Sopenharmony_ci.. function:: loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) 2857db96d56Sopenharmony_ci 2867db96d56Sopenharmony_ci Deserialize *s* (a :class:`str`, :class:`bytes` or :class:`bytearray` 2877db96d56Sopenharmony_ci instance containing a JSON document) to a Python object using this 2887db96d56Sopenharmony_ci :ref:`conversion table <json-to-py-table>`. 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci The other arguments have the same meaning as in :func:`load`. 2917db96d56Sopenharmony_ci 2927db96d56Sopenharmony_ci If the data being deserialized is not a valid JSON document, a 2937db96d56Sopenharmony_ci :exc:`JSONDecodeError` will be raised. 2947db96d56Sopenharmony_ci 2957db96d56Sopenharmony_ci .. versionchanged:: 3.6 2967db96d56Sopenharmony_ci *s* can now be of type :class:`bytes` or :class:`bytearray`. The 2977db96d56Sopenharmony_ci input encoding should be UTF-8, UTF-16 or UTF-32. 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_ci .. versionchanged:: 3.9 3007db96d56Sopenharmony_ci The keyword argument *encoding* has been removed. 3017db96d56Sopenharmony_ci 3027db96d56Sopenharmony_ci 3037db96d56Sopenharmony_ciEncoders and Decoders 3047db96d56Sopenharmony_ci--------------------- 3057db96d56Sopenharmony_ci 3067db96d56Sopenharmony_ci.. class:: JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None) 3077db96d56Sopenharmony_ci 3087db96d56Sopenharmony_ci Simple JSON decoder. 3097db96d56Sopenharmony_ci 3107db96d56Sopenharmony_ci Performs the following translations in decoding by default: 3117db96d56Sopenharmony_ci 3127db96d56Sopenharmony_ci .. _json-to-py-table: 3137db96d56Sopenharmony_ci 3147db96d56Sopenharmony_ci +---------------+-------------------+ 3157db96d56Sopenharmony_ci | JSON | Python | 3167db96d56Sopenharmony_ci +===============+===================+ 3177db96d56Sopenharmony_ci | object | dict | 3187db96d56Sopenharmony_ci +---------------+-------------------+ 3197db96d56Sopenharmony_ci | array | list | 3207db96d56Sopenharmony_ci +---------------+-------------------+ 3217db96d56Sopenharmony_ci | string | str | 3227db96d56Sopenharmony_ci +---------------+-------------------+ 3237db96d56Sopenharmony_ci | number (int) | int | 3247db96d56Sopenharmony_ci +---------------+-------------------+ 3257db96d56Sopenharmony_ci | number (real) | float | 3267db96d56Sopenharmony_ci +---------------+-------------------+ 3277db96d56Sopenharmony_ci | true | True | 3287db96d56Sopenharmony_ci +---------------+-------------------+ 3297db96d56Sopenharmony_ci | false | False | 3307db96d56Sopenharmony_ci +---------------+-------------------+ 3317db96d56Sopenharmony_ci | null | None | 3327db96d56Sopenharmony_ci +---------------+-------------------+ 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ci It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their 3357db96d56Sopenharmony_ci corresponding ``float`` values, which is outside the JSON spec. 3367db96d56Sopenharmony_ci 3377db96d56Sopenharmony_ci *object_hook*, if specified, will be called with the result of every JSON 3387db96d56Sopenharmony_ci object decoded and its return value will be used in place of the given 3397db96d56Sopenharmony_ci :class:`dict`. This can be used to provide custom deserializations (e.g. to 3407db96d56Sopenharmony_ci support `JSON-RPC <https://www.jsonrpc.org>`_ class hinting). 3417db96d56Sopenharmony_ci 3427db96d56Sopenharmony_ci *object_pairs_hook*, if specified will be called with the result of every 3437db96d56Sopenharmony_ci JSON object decoded with an ordered list of pairs. The return value of 3447db96d56Sopenharmony_ci *object_pairs_hook* will be used instead of the :class:`dict`. This 3457db96d56Sopenharmony_ci feature can be used to implement custom decoders. If *object_hook* is also 3467db96d56Sopenharmony_ci defined, the *object_pairs_hook* takes priority. 3477db96d56Sopenharmony_ci 3487db96d56Sopenharmony_ci .. versionchanged:: 3.1 3497db96d56Sopenharmony_ci Added support for *object_pairs_hook*. 3507db96d56Sopenharmony_ci 3517db96d56Sopenharmony_ci *parse_float*, if specified, will be called with the string of every JSON 3527db96d56Sopenharmony_ci float to be decoded. By default, this is equivalent to ``float(num_str)``. 3537db96d56Sopenharmony_ci This can be used to use another datatype or parser for JSON floats 3547db96d56Sopenharmony_ci (e.g. :class:`decimal.Decimal`). 3557db96d56Sopenharmony_ci 3567db96d56Sopenharmony_ci *parse_int*, if specified, will be called with the string of every JSON int 3577db96d56Sopenharmony_ci to be decoded. By default, this is equivalent to ``int(num_str)``. This can 3587db96d56Sopenharmony_ci be used to use another datatype or parser for JSON integers 3597db96d56Sopenharmony_ci (e.g. :class:`float`). 3607db96d56Sopenharmony_ci 3617db96d56Sopenharmony_ci *parse_constant*, if specified, will be called with one of the following 3627db96d56Sopenharmony_ci strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. 3637db96d56Sopenharmony_ci This can be used to raise an exception if invalid JSON numbers 3647db96d56Sopenharmony_ci are encountered. 3657db96d56Sopenharmony_ci 3667db96d56Sopenharmony_ci If *strict* is false (``True`` is the default), then control characters 3677db96d56Sopenharmony_ci will be allowed inside strings. Control characters in this context are 3687db96d56Sopenharmony_ci those with character codes in the 0--31 range, including ``'\t'`` (tab), 3697db96d56Sopenharmony_ci ``'\n'``, ``'\r'`` and ``'\0'``. 3707db96d56Sopenharmony_ci 3717db96d56Sopenharmony_ci If the data being deserialized is not a valid JSON document, a 3727db96d56Sopenharmony_ci :exc:`JSONDecodeError` will be raised. 3737db96d56Sopenharmony_ci 3747db96d56Sopenharmony_ci .. versionchanged:: 3.6 3757db96d56Sopenharmony_ci All parameters are now :ref:`keyword-only <keyword-only_parameter>`. 3767db96d56Sopenharmony_ci 3777db96d56Sopenharmony_ci .. method:: decode(s) 3787db96d56Sopenharmony_ci 3797db96d56Sopenharmony_ci Return the Python representation of *s* (a :class:`str` instance 3807db96d56Sopenharmony_ci containing a JSON document). 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci :exc:`JSONDecodeError` will be raised if the given JSON document is not 3837db96d56Sopenharmony_ci valid. 3847db96d56Sopenharmony_ci 3857db96d56Sopenharmony_ci .. method:: raw_decode(s) 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_ci Decode a JSON document from *s* (a :class:`str` beginning with a 3887db96d56Sopenharmony_ci JSON document) and return a 2-tuple of the Python representation 3897db96d56Sopenharmony_ci and the index in *s* where the document ended. 3907db96d56Sopenharmony_ci 3917db96d56Sopenharmony_ci This can be used to decode a JSON document from a string that may have 3927db96d56Sopenharmony_ci extraneous data at the end. 3937db96d56Sopenharmony_ci 3947db96d56Sopenharmony_ci 3957db96d56Sopenharmony_ci.. class:: JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None) 3967db96d56Sopenharmony_ci 3977db96d56Sopenharmony_ci Extensible JSON encoder for Python data structures. 3987db96d56Sopenharmony_ci 3997db96d56Sopenharmony_ci Supports the following objects and types by default: 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci .. _py-to-json-table: 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ci +----------------------------------------+---------------+ 4047db96d56Sopenharmony_ci | Python | JSON | 4057db96d56Sopenharmony_ci +========================================+===============+ 4067db96d56Sopenharmony_ci | dict | object | 4077db96d56Sopenharmony_ci +----------------------------------------+---------------+ 4087db96d56Sopenharmony_ci | list, tuple | array | 4097db96d56Sopenharmony_ci +----------------------------------------+---------------+ 4107db96d56Sopenharmony_ci | str | string | 4117db96d56Sopenharmony_ci +----------------------------------------+---------------+ 4127db96d56Sopenharmony_ci | int, float, int- & float-derived Enums | number | 4137db96d56Sopenharmony_ci +----------------------------------------+---------------+ 4147db96d56Sopenharmony_ci | True | true | 4157db96d56Sopenharmony_ci +----------------------------------------+---------------+ 4167db96d56Sopenharmony_ci | False | false | 4177db96d56Sopenharmony_ci +----------------------------------------+---------------+ 4187db96d56Sopenharmony_ci | None | null | 4197db96d56Sopenharmony_ci +----------------------------------------+---------------+ 4207db96d56Sopenharmony_ci 4217db96d56Sopenharmony_ci .. versionchanged:: 3.4 4227db96d56Sopenharmony_ci Added support for int- and float-derived Enum classes. 4237db96d56Sopenharmony_ci 4247db96d56Sopenharmony_ci To extend this to recognize other objects, subclass and implement a 4257db96d56Sopenharmony_ci :meth:`default` method with another method that returns a serializable object 4267db96d56Sopenharmony_ci for ``o`` if possible, otherwise it should call the superclass implementation 4277db96d56Sopenharmony_ci (to raise :exc:`TypeError`). 4287db96d56Sopenharmony_ci 4297db96d56Sopenharmony_ci If *skipkeys* is false (the default), a :exc:`TypeError` will be raised when 4307db96d56Sopenharmony_ci trying to encode keys that are not :class:`str`, :class:`int`, :class:`float` 4317db96d56Sopenharmony_ci or ``None``. If *skipkeys* is true, such items are simply skipped. 4327db96d56Sopenharmony_ci 4337db96d56Sopenharmony_ci If *ensure_ascii* is true (the default), the output is guaranteed to 4347db96d56Sopenharmony_ci have all incoming non-ASCII characters escaped. If *ensure_ascii* is 4357db96d56Sopenharmony_ci false, these characters will be output as-is. 4367db96d56Sopenharmony_ci 4377db96d56Sopenharmony_ci If *check_circular* is true (the default), then lists, dicts, and custom 4387db96d56Sopenharmony_ci encoded objects will be checked for circular references during encoding to 4397db96d56Sopenharmony_ci prevent an infinite recursion (which would cause a :exc:`RecursionError`). 4407db96d56Sopenharmony_ci Otherwise, no such check takes place. 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ci If *allow_nan* is true (the default), then ``NaN``, ``Infinity``, and 4437db96d56Sopenharmony_ci ``-Infinity`` will be encoded as such. This behavior is not JSON 4447db96d56Sopenharmony_ci specification compliant, but is consistent with most JavaScript based 4457db96d56Sopenharmony_ci encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode 4467db96d56Sopenharmony_ci such floats. 4477db96d56Sopenharmony_ci 4487db96d56Sopenharmony_ci If *sort_keys* is true (default: ``False``), then the output of dictionaries 4497db96d56Sopenharmony_ci will be sorted by key; this is useful for regression tests to ensure that 4507db96d56Sopenharmony_ci JSON serializations can be compared on a day-to-day basis. 4517db96d56Sopenharmony_ci 4527db96d56Sopenharmony_ci If *indent* is a non-negative integer or string, then JSON array elements and 4537db96d56Sopenharmony_ci object members will be pretty-printed with that indent level. An indent level 4547db96d56Sopenharmony_ci of 0, negative, or ``""`` will only insert newlines. ``None`` (the default) 4557db96d56Sopenharmony_ci selects the most compact representation. Using a positive integer indent 4567db96d56Sopenharmony_ci indents that many spaces per level. If *indent* is a string (such as ``"\t"``), 4577db96d56Sopenharmony_ci that string is used to indent each level. 4587db96d56Sopenharmony_ci 4597db96d56Sopenharmony_ci .. versionchanged:: 3.2 4607db96d56Sopenharmony_ci Allow strings for *indent* in addition to integers. 4617db96d56Sopenharmony_ci 4627db96d56Sopenharmony_ci If specified, *separators* should be an ``(item_separator, key_separator)`` 4637db96d56Sopenharmony_ci tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and 4647db96d56Sopenharmony_ci ``(',', ': ')`` otherwise. To get the most compact JSON representation, 4657db96d56Sopenharmony_ci you should specify ``(',', ':')`` to eliminate whitespace. 4667db96d56Sopenharmony_ci 4677db96d56Sopenharmony_ci .. versionchanged:: 3.4 4687db96d56Sopenharmony_ci Use ``(',', ': ')`` as default if *indent* is not ``None``. 4697db96d56Sopenharmony_ci 4707db96d56Sopenharmony_ci If specified, *default* should be a function that gets called for objects that 4717db96d56Sopenharmony_ci can't otherwise be serialized. It should return a JSON encodable version of 4727db96d56Sopenharmony_ci the object or raise a :exc:`TypeError`. If not specified, :exc:`TypeError` 4737db96d56Sopenharmony_ci is raised. 4747db96d56Sopenharmony_ci 4757db96d56Sopenharmony_ci .. versionchanged:: 3.6 4767db96d56Sopenharmony_ci All parameters are now :ref:`keyword-only <keyword-only_parameter>`. 4777db96d56Sopenharmony_ci 4787db96d56Sopenharmony_ci 4797db96d56Sopenharmony_ci .. method:: default(o) 4807db96d56Sopenharmony_ci 4817db96d56Sopenharmony_ci Implement this method in a subclass such that it returns a serializable 4827db96d56Sopenharmony_ci object for *o*, or calls the base implementation (to raise a 4837db96d56Sopenharmony_ci :exc:`TypeError`). 4847db96d56Sopenharmony_ci 4857db96d56Sopenharmony_ci For example, to support arbitrary iterators, you could implement 4867db96d56Sopenharmony_ci :meth:`default` like this:: 4877db96d56Sopenharmony_ci 4887db96d56Sopenharmony_ci def default(self, o): 4897db96d56Sopenharmony_ci try: 4907db96d56Sopenharmony_ci iterable = iter(o) 4917db96d56Sopenharmony_ci except TypeError: 4927db96d56Sopenharmony_ci pass 4937db96d56Sopenharmony_ci else: 4947db96d56Sopenharmony_ci return list(iterable) 4957db96d56Sopenharmony_ci # Let the base class default method raise the TypeError 4967db96d56Sopenharmony_ci return json.JSONEncoder.default(self, o) 4977db96d56Sopenharmony_ci 4987db96d56Sopenharmony_ci 4997db96d56Sopenharmony_ci .. method:: encode(o) 5007db96d56Sopenharmony_ci 5017db96d56Sopenharmony_ci Return a JSON string representation of a Python data structure, *o*. For 5027db96d56Sopenharmony_ci example:: 5037db96d56Sopenharmony_ci 5047db96d56Sopenharmony_ci >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]}) 5057db96d56Sopenharmony_ci '{"foo": ["bar", "baz"]}' 5067db96d56Sopenharmony_ci 5077db96d56Sopenharmony_ci 5087db96d56Sopenharmony_ci .. method:: iterencode(o) 5097db96d56Sopenharmony_ci 5107db96d56Sopenharmony_ci Encode the given object, *o*, and yield each string representation as 5117db96d56Sopenharmony_ci available. For example:: 5127db96d56Sopenharmony_ci 5137db96d56Sopenharmony_ci for chunk in json.JSONEncoder().iterencode(bigobject): 5147db96d56Sopenharmony_ci mysocket.write(chunk) 5157db96d56Sopenharmony_ci 5167db96d56Sopenharmony_ci 5177db96d56Sopenharmony_ciExceptions 5187db96d56Sopenharmony_ci---------- 5197db96d56Sopenharmony_ci 5207db96d56Sopenharmony_ci.. exception:: JSONDecodeError(msg, doc, pos) 5217db96d56Sopenharmony_ci 5227db96d56Sopenharmony_ci Subclass of :exc:`ValueError` with the following additional attributes: 5237db96d56Sopenharmony_ci 5247db96d56Sopenharmony_ci .. attribute:: msg 5257db96d56Sopenharmony_ci 5267db96d56Sopenharmony_ci The unformatted error message. 5277db96d56Sopenharmony_ci 5287db96d56Sopenharmony_ci .. attribute:: doc 5297db96d56Sopenharmony_ci 5307db96d56Sopenharmony_ci The JSON document being parsed. 5317db96d56Sopenharmony_ci 5327db96d56Sopenharmony_ci .. attribute:: pos 5337db96d56Sopenharmony_ci 5347db96d56Sopenharmony_ci The start index of *doc* where parsing failed. 5357db96d56Sopenharmony_ci 5367db96d56Sopenharmony_ci .. attribute:: lineno 5377db96d56Sopenharmony_ci 5387db96d56Sopenharmony_ci The line corresponding to *pos*. 5397db96d56Sopenharmony_ci 5407db96d56Sopenharmony_ci .. attribute:: colno 5417db96d56Sopenharmony_ci 5427db96d56Sopenharmony_ci The column corresponding to *pos*. 5437db96d56Sopenharmony_ci 5447db96d56Sopenharmony_ci .. versionadded:: 3.5 5457db96d56Sopenharmony_ci 5467db96d56Sopenharmony_ci 5477db96d56Sopenharmony_ciStandard Compliance and Interoperability 5487db96d56Sopenharmony_ci---------------------------------------- 5497db96d56Sopenharmony_ci 5507db96d56Sopenharmony_ciThe JSON format is specified by :rfc:`7159` and by 5517db96d56Sopenharmony_ci`ECMA-404 <https://www.ecma-international.org/publications-and-standards/standards/ecma-404/>`_. 5527db96d56Sopenharmony_ciThis section details this module's level of compliance with the RFC. 5537db96d56Sopenharmony_ciFor simplicity, :class:`JSONEncoder` and :class:`JSONDecoder` subclasses, and 5547db96d56Sopenharmony_ciparameters other than those explicitly mentioned, are not considered. 5557db96d56Sopenharmony_ci 5567db96d56Sopenharmony_ciThis module does not comply with the RFC in a strict fashion, implementing some 5577db96d56Sopenharmony_ciextensions that are valid JavaScript but not valid JSON. In particular: 5587db96d56Sopenharmony_ci 5597db96d56Sopenharmony_ci- Infinite and NaN number values are accepted and output; 5607db96d56Sopenharmony_ci- Repeated names within an object are accepted, and only the value of the last 5617db96d56Sopenharmony_ci name-value pair is used. 5627db96d56Sopenharmony_ci 5637db96d56Sopenharmony_ciSince the RFC permits RFC-compliant parsers to accept input texts that are not 5647db96d56Sopenharmony_ciRFC-compliant, this module's deserializer is technically RFC-compliant under 5657db96d56Sopenharmony_cidefault settings. 5667db96d56Sopenharmony_ci 5677db96d56Sopenharmony_ciCharacter Encodings 5687db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^ 5697db96d56Sopenharmony_ci 5707db96d56Sopenharmony_ciThe RFC requires that JSON be represented using either UTF-8, UTF-16, or 5717db96d56Sopenharmony_ciUTF-32, with UTF-8 being the recommended default for maximum interoperability. 5727db96d56Sopenharmony_ci 5737db96d56Sopenharmony_ciAs permitted, though not required, by the RFC, this module's serializer sets 5747db96d56Sopenharmony_ci*ensure_ascii=True* by default, thus escaping the output so that the resulting 5757db96d56Sopenharmony_cistrings only contain ASCII characters. 5767db96d56Sopenharmony_ci 5777db96d56Sopenharmony_ciOther than the *ensure_ascii* parameter, this module is defined strictly in 5787db96d56Sopenharmony_citerms of conversion between Python objects and 5797db96d56Sopenharmony_ci:class:`Unicode strings <str>`, and thus does not otherwise directly address 5807db96d56Sopenharmony_cithe issue of character encodings. 5817db96d56Sopenharmony_ci 5827db96d56Sopenharmony_ciThe RFC prohibits adding a byte order mark (BOM) to the start of a JSON text, 5837db96d56Sopenharmony_ciand this module's serializer does not add a BOM to its output. 5847db96d56Sopenharmony_ciThe RFC permits, but does not require, JSON deserializers to ignore an initial 5857db96d56Sopenharmony_ciBOM in their input. This module's deserializer raises a :exc:`ValueError` 5867db96d56Sopenharmony_ciwhen an initial BOM is present. 5877db96d56Sopenharmony_ci 5887db96d56Sopenharmony_ciThe RFC does not explicitly forbid JSON strings which contain byte sequences 5897db96d56Sopenharmony_cithat don't correspond to valid Unicode characters (e.g. unpaired UTF-16 5907db96d56Sopenharmony_cisurrogates), but it does note that they may cause interoperability problems. 5917db96d56Sopenharmony_ciBy default, this module accepts and outputs (when present in the original 5927db96d56Sopenharmony_ci:class:`str`) code points for such sequences. 5937db96d56Sopenharmony_ci 5947db96d56Sopenharmony_ci 5957db96d56Sopenharmony_ciInfinite and NaN Number Values 5967db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 5977db96d56Sopenharmony_ci 5987db96d56Sopenharmony_ciThe RFC does not permit the representation of infinite or NaN number values. 5997db96d56Sopenharmony_ciDespite that, by default, this module accepts and outputs ``Infinity``, 6007db96d56Sopenharmony_ci``-Infinity``, and ``NaN`` as if they were valid JSON number literal values:: 6017db96d56Sopenharmony_ci 6027db96d56Sopenharmony_ci >>> # Neither of these calls raises an exception, but the results are not valid JSON 6037db96d56Sopenharmony_ci >>> json.dumps(float('-inf')) 6047db96d56Sopenharmony_ci '-Infinity' 6057db96d56Sopenharmony_ci >>> json.dumps(float('nan')) 6067db96d56Sopenharmony_ci 'NaN' 6077db96d56Sopenharmony_ci >>> # Same when deserializing 6087db96d56Sopenharmony_ci >>> json.loads('-Infinity') 6097db96d56Sopenharmony_ci -inf 6107db96d56Sopenharmony_ci >>> json.loads('NaN') 6117db96d56Sopenharmony_ci nan 6127db96d56Sopenharmony_ci 6137db96d56Sopenharmony_ciIn the serializer, the *allow_nan* parameter can be used to alter this 6147db96d56Sopenharmony_cibehavior. In the deserializer, the *parse_constant* parameter can be used to 6157db96d56Sopenharmony_cialter this behavior. 6167db96d56Sopenharmony_ci 6177db96d56Sopenharmony_ci 6187db96d56Sopenharmony_ciRepeated Names Within an Object 6197db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 6207db96d56Sopenharmony_ci 6217db96d56Sopenharmony_ciThe RFC specifies that the names within a JSON object should be unique, but 6227db96d56Sopenharmony_cidoes not mandate how repeated names in JSON objects should be handled. By 6237db96d56Sopenharmony_cidefault, this module does not raise an exception; instead, it ignores all but 6247db96d56Sopenharmony_cithe last name-value pair for a given name:: 6257db96d56Sopenharmony_ci 6267db96d56Sopenharmony_ci >>> weird_json = '{"x": 1, "x": 2, "x": 3}' 6277db96d56Sopenharmony_ci >>> json.loads(weird_json) 6287db96d56Sopenharmony_ci {'x': 3} 6297db96d56Sopenharmony_ci 6307db96d56Sopenharmony_ciThe *object_pairs_hook* parameter can be used to alter this behavior. 6317db96d56Sopenharmony_ci 6327db96d56Sopenharmony_ci 6337db96d56Sopenharmony_ciTop-level Non-Object, Non-Array Values 6347db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 6357db96d56Sopenharmony_ci 6367db96d56Sopenharmony_ciThe old version of JSON specified by the obsolete :rfc:`4627` required that 6377db96d56Sopenharmony_cithe top-level value of a JSON text must be either a JSON object or array 6387db96d56Sopenharmony_ci(Python :class:`dict` or :class:`list`), and could not be a JSON null, 6397db96d56Sopenharmony_ciboolean, number, or string value. :rfc:`7159` removed that restriction, and 6407db96d56Sopenharmony_cithis module does not and has never implemented that restriction in either its 6417db96d56Sopenharmony_ciserializer or its deserializer. 6427db96d56Sopenharmony_ci 6437db96d56Sopenharmony_ciRegardless, for maximum interoperability, you may wish to voluntarily adhere 6447db96d56Sopenharmony_cito the restriction yourself. 6457db96d56Sopenharmony_ci 6467db96d56Sopenharmony_ci 6477db96d56Sopenharmony_ciImplementation Limitations 6487db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^ 6497db96d56Sopenharmony_ci 6507db96d56Sopenharmony_ciSome JSON deserializer implementations may set limits on: 6517db96d56Sopenharmony_ci 6527db96d56Sopenharmony_ci* the size of accepted JSON texts 6537db96d56Sopenharmony_ci* the maximum level of nesting of JSON objects and arrays 6547db96d56Sopenharmony_ci* the range and precision of JSON numbers 6557db96d56Sopenharmony_ci* the content and maximum length of JSON strings 6567db96d56Sopenharmony_ci 6577db96d56Sopenharmony_ciThis module does not impose any such limits beyond those of the relevant 6587db96d56Sopenharmony_ciPython datatypes themselves or the Python interpreter itself. 6597db96d56Sopenharmony_ci 6607db96d56Sopenharmony_ciWhen serializing to JSON, beware any such limitations in applications that may 6617db96d56Sopenharmony_ciconsume your JSON. In particular, it is common for JSON numbers to be 6627db96d56Sopenharmony_cideserialized into IEEE 754 double precision numbers and thus subject to that 6637db96d56Sopenharmony_cirepresentation's range and precision limitations. This is especially relevant 6647db96d56Sopenharmony_ciwhen serializing Python :class:`int` values of extremely large magnitude, or 6657db96d56Sopenharmony_ciwhen serializing instances of "exotic" numerical types such as 6667db96d56Sopenharmony_ci:class:`decimal.Decimal`. 6677db96d56Sopenharmony_ci 6687db96d56Sopenharmony_ci 6697db96d56Sopenharmony_ci.. _json-commandline: 6707db96d56Sopenharmony_ci.. program:: json.tool 6717db96d56Sopenharmony_ci 6727db96d56Sopenharmony_ciCommand Line Interface 6737db96d56Sopenharmony_ci---------------------- 6747db96d56Sopenharmony_ci 6757db96d56Sopenharmony_ci.. module:: json.tool 6767db96d56Sopenharmony_ci :synopsis: A command line to validate and pretty-print JSON. 6777db96d56Sopenharmony_ci 6787db96d56Sopenharmony_ci**Source code:** :source:`Lib/json/tool.py` 6797db96d56Sopenharmony_ci 6807db96d56Sopenharmony_ci-------------- 6817db96d56Sopenharmony_ci 6827db96d56Sopenharmony_ciThe :mod:`json.tool` module provides a simple command line interface to validate 6837db96d56Sopenharmony_ciand pretty-print JSON objects. 6847db96d56Sopenharmony_ci 6857db96d56Sopenharmony_ciIf the optional ``infile`` and ``outfile`` arguments are not 6867db96d56Sopenharmony_cispecified, :attr:`sys.stdin` and :attr:`sys.stdout` will be used respectively: 6877db96d56Sopenharmony_ci 6887db96d56Sopenharmony_ci.. code-block:: shell-session 6897db96d56Sopenharmony_ci 6907db96d56Sopenharmony_ci $ echo '{"json": "obj"}' | python -m json.tool 6917db96d56Sopenharmony_ci { 6927db96d56Sopenharmony_ci "json": "obj" 6937db96d56Sopenharmony_ci } 6947db96d56Sopenharmony_ci $ echo '{1.2:3.4}' | python -m json.tool 6957db96d56Sopenharmony_ci Expecting property name enclosed in double quotes: line 1 column 2 (char 1) 6967db96d56Sopenharmony_ci 6977db96d56Sopenharmony_ci.. versionchanged:: 3.5 6987db96d56Sopenharmony_ci The output is now in the same order as the input. Use the 6997db96d56Sopenharmony_ci :option:`--sort-keys` option to sort the output of dictionaries 7007db96d56Sopenharmony_ci alphabetically by key. 7017db96d56Sopenharmony_ci 7027db96d56Sopenharmony_ci 7037db96d56Sopenharmony_ciCommand line options 7047db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^ 7057db96d56Sopenharmony_ci 7067db96d56Sopenharmony_ci.. cmdoption:: infile 7077db96d56Sopenharmony_ci 7087db96d56Sopenharmony_ci The JSON file to be validated or pretty-printed: 7097db96d56Sopenharmony_ci 7107db96d56Sopenharmony_ci .. code-block:: shell-session 7117db96d56Sopenharmony_ci 7127db96d56Sopenharmony_ci $ python -m json.tool mp_films.json 7137db96d56Sopenharmony_ci [ 7147db96d56Sopenharmony_ci { 7157db96d56Sopenharmony_ci "title": "And Now for Something Completely Different", 7167db96d56Sopenharmony_ci "year": 1971 7177db96d56Sopenharmony_ci }, 7187db96d56Sopenharmony_ci { 7197db96d56Sopenharmony_ci "title": "Monty Python and the Holy Grail", 7207db96d56Sopenharmony_ci "year": 1975 7217db96d56Sopenharmony_ci } 7227db96d56Sopenharmony_ci ] 7237db96d56Sopenharmony_ci 7247db96d56Sopenharmony_ci If *infile* is not specified, read from :attr:`sys.stdin`. 7257db96d56Sopenharmony_ci 7267db96d56Sopenharmony_ci.. cmdoption:: outfile 7277db96d56Sopenharmony_ci 7287db96d56Sopenharmony_ci Write the output of the *infile* to the given *outfile*. Otherwise, write it 7297db96d56Sopenharmony_ci to :attr:`sys.stdout`. 7307db96d56Sopenharmony_ci 7317db96d56Sopenharmony_ci.. cmdoption:: --sort-keys 7327db96d56Sopenharmony_ci 7337db96d56Sopenharmony_ci Sort the output of dictionaries alphabetically by key. 7347db96d56Sopenharmony_ci 7357db96d56Sopenharmony_ci .. versionadded:: 3.5 7367db96d56Sopenharmony_ci 7377db96d56Sopenharmony_ci.. cmdoption:: --no-ensure-ascii 7387db96d56Sopenharmony_ci 7397db96d56Sopenharmony_ci Disable escaping of non-ascii characters, see :func:`json.dumps` for more information. 7407db96d56Sopenharmony_ci 7417db96d56Sopenharmony_ci .. versionadded:: 3.9 7427db96d56Sopenharmony_ci 7437db96d56Sopenharmony_ci.. cmdoption:: --json-lines 7447db96d56Sopenharmony_ci 7457db96d56Sopenharmony_ci Parse every input line as separate JSON object. 7467db96d56Sopenharmony_ci 7477db96d56Sopenharmony_ci .. versionadded:: 3.8 7487db96d56Sopenharmony_ci 7497db96d56Sopenharmony_ci.. cmdoption:: --indent, --tab, --no-indent, --compact 7507db96d56Sopenharmony_ci 7517db96d56Sopenharmony_ci Mutually exclusive options for whitespace control. 7527db96d56Sopenharmony_ci 7537db96d56Sopenharmony_ci .. versionadded:: 3.9 7547db96d56Sopenharmony_ci 7557db96d56Sopenharmony_ci.. cmdoption:: -h, --help 7567db96d56Sopenharmony_ci 7577db96d56Sopenharmony_ci Show the help message. 7587db96d56Sopenharmony_ci 7597db96d56Sopenharmony_ci 7607db96d56Sopenharmony_ci.. rubric:: Footnotes 7617db96d56Sopenharmony_ci 7627db96d56Sopenharmony_ci.. [#rfc-errata] As noted in `the errata for RFC 7159 7637db96d56Sopenharmony_ci <https://www.rfc-editor.org/errata_search.php?rfc=7159>`_, 7647db96d56Sopenharmony_ci JSON permits literal U+2028 (LINE SEPARATOR) and 7657db96d56Sopenharmony_ci U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript 7667db96d56Sopenharmony_ci (as of ECMAScript Edition 5.1) does not. 767