<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 導航 - [索引](../genindex.xhtml "總目錄") - [模塊](../py-modindex.xhtml "Python 模塊索引") | - [下一頁](mailcap.xhtml "mailcap --- Mailcap file handling") | - [上一頁](email.iterators.xhtml "email.iterators: Iterators") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) ? - zh\_CN 3.7.3 [文檔](../index.xhtml) ? - [Python 標準庫](index.xhtml) ? - [互聯網數據處理](netdata.xhtml) ? - $('.inline-search').show(0); | # [`json`](#module-json "json: Encode and decode the JSON format.") --- JSON 編碼和解碼器 **源代碼:** [Lib/json/\_\_init\_\_.py](https://github.com/python/cpython/tree/3.7/Lib/json/__init__.py) \[https://github.com/python/cpython/tree/3.7/Lib/json/\_\_init\_\_.py\] - - - - - - [JSON (JavaScript Object Notation)](http://json.org) \[http://json.org\],由 [**RFC 7159**](https://tools.ietf.org/html/rfc7159.html) \[https://tools.ietf.org/html/rfc7159.html\] (which obsoletes [**RFC 4627**](https://tools.ietf.org/html/rfc4627.html) \[https://tools.ietf.org/html/rfc4627.html\]) 和 [ECMA-404](http://www.ecma-international.org/publications/standards/Ecma-404.htm) \[http://www.ecma-international.org/publications/standards/Ecma-404.htm\] 指定,是一個受 [JavaScript](https://en.wikipedia.org/wiki/JavaScript) \[https://en.wikipedia.org/wiki/JavaScript\] 的對象字面量語法啟發的輕量級數據交換格式,盡管它不僅僅是一個嚴格意義上的 JavaScript 的字集 [1](#rfc-errata)。 [`json`](#module-json "json: Encode and decode the JSON format.") 提供了與標準庫 [`marshal`](marshal.xhtml#module-marshal "marshal: Convert Python objects to streams of bytes and back (with different constraints).") 和 [`pickle`](pickle.xhtml#module-pickle "pickle: Convert Python objects to streams of bytes and back.") 相似的API接口。 對基本的 Python 對象層次結構進行編碼: ``` >>> import json >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar": ["baz", null, 1.0, 2]}]' >>> print(json.dumps("\"foo\bar")) "\"foo\bar" >>> print(json.dumps('\u1234')) "\u1234" >>> print(json.dumps('\\')) "\\" >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)) {"a": 0, "b": 0, "c": 0} >>> from io import StringIO >>> io = StringIO() >>> json.dump(['streaming API'], io) >>> io.getvalue() '["streaming API"]' ``` 緊湊編碼: ``` >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]' ``` 美化輸出: ``` >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 } ``` JSON解碼: ``` >>> import json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') ['foo', {'bar': ['baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') '"foo\x08ar' >>> from io import StringIO >>> io = StringIO('["streaming API"]') >>> json.load(io) ['streaming API'] ``` 特殊JSON對象解碼: ``` >>> import json >>> def as_complex(dct): ... if '__complex__' in dct: ... return complex(dct['real'], dct['imag']) ... return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', ... object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1') ``` 擴展 [`JSONEncoder`](#json.JSONEncoder "json.JSONEncoder"): ``` >>> import json >>> class ComplexEncoder(json.JSONEncoder): ... def default(self, obj): ... if isinstance(obj, complex): ... return [obj.real, obj.imag] ... # Let the base class default method raise the TypeError ... return json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']'] ``` 從命令行使用 [`json.tool`](#module-json.tool "json.tool: A command line to validate and pretty-print JSON.") 來驗證并美化輸出: ``` $ echo '{"json":"obj"}' | python -m json.tool { "json": "obj" } $ echo '{1.2:3.4}' | python -m json.tool Expecting property name enclosed in double quotes: line 1 column 2 (char 1) ``` 詳細文檔請參見 [Command Line Interface](#json-commandline)。 注解 JSON 是 [YAML](http://yaml.org/) \[http://yaml.org/\] 1.2 的一個子集。由該模塊的默認設置生成的 JSON (尤其是默認的 “分隔符” 設置值)也是 YAML 1.0 and 1.1 的一個子集。因此該模塊也能夠用于序列化為 YAML。 ## 基本使用 `json.``dump`(*obj*, *fp*, *\**, *skipkeys=False*, *ensure\_ascii=True*, *check\_circular=True*, *allow\_nan=True*, *cls=None*, *indent=None*, *separators=None*, *default=None*, *sort\_keys=False*, *\*\*kw*)使用這個 [conversion table](#py-to-json-table) 來序列化 *obj* 為一個 JSON 格式的流并輸出到 *fp* (一個支持 `.write()` 的 [file-like object](../glossary.xhtml#term-file-like-object))。 如果 *skipkeys* 是 true (默認為 `False`),那么那些不是基本對象(包括 [`str`](stdtypes.xhtml#str "str"), [`int`](functions.xhtml#int "int")、[`float`](functions.xhtml#float "float")、[`bool`](functions.xhtml#bool "bool")、`None`)的字典的鍵會被跳過;否則引發一個 [`TypeError`](exceptions.xhtml#TypeError "TypeError")。 [`json`](#module-json "json: Encode and decode the JSON format.") 模塊始終產生 [`str`](stdtypes.xhtml#str "str") 對象而非 [`bytes`](stdtypes.xhtml#bytes "bytes") 對象。因此,`fp.write()` 必須支持 [`str`](stdtypes.xhtml#str "str") 輸入。 如果 *ensure\_ascii* 是 true (即默認值),輸出保證將所有輸入的非 ASCII 字符轉義。如果 *ensure\_ascii* 是 false,這些字符會原樣輸出。 如果 *check\_circular* 是為假值 (默認為 `True`),那么容器類型的循環引用檢驗會被跳過并且循環引用會引發一個 [`OverflowError`](exceptions.xhtml#OverflowError "OverflowError") (或者更糟的情況)。 如果 *allow\_nan* 是 false(默認為 `True`),那么在對嚴格 JSON 規格范圍外的 [`float`](functions.xhtml#float "float") 類型值(`nan`、`inf` 和 `-inf`)進行序列化時會引發一個 [`ValueError`](exceptions.xhtml#ValueError "ValueError")。如果 *allow\_nan* 是 true,則使用它們的 JavaScript 等價形式(`NaN`、`Infinity` 和 `-Infinity`)。 如果 *indent* 是一個非負整數或者字符串,那么 JSON 數組元素和對象成員會被美化輸出為該值指定的縮進等級。如果縮進等級為零、負數或者 `""`,則只會添加換行符。`None``(默認值)選擇最緊湊的表達。使用一個正整數會讓每一層縮進同樣數量的空格。如果 *indent* 是一個字符串(比如 ``"\t"`),那個字符串會被用于縮進每一層。 在 3.2 版更改: 允許使用字符串作為 *indent* 而不再僅僅是整數。 當指定時,*separators* 應當是一個 `(item_separator, key_separator)` 元組。當 *indent* 為 `None` 時,默認值取 `(', ', ': ')`,否則取 `(',', ': ')`。為了得到最緊湊的 JSON 表達式,你應該指定其為 `(',', ':')` 以消除空白字符。 在 3.4 版更改: 現當 *indent* 不是 `None` 時,采用 `(',', ': ')` 作為默認值。 當 *default* 被指定時,其應該是一個函數,每當某個對象無法被序列化時它會被調用。它應該返回該對象的一個可以被 JSON 編碼的版本或者引發一個 [`TypeError`](exceptions.xhtml#TypeError "TypeError")。如果沒有被指定,則會直接引發 [`TypeError`](exceptions.xhtml#TypeError "TypeError")。 如果 *sort\_keys* 是 true(默認為 `False`),那么字典的輸出會以鍵的順序排序。 為了使用一個自定義的 [`JSONEncoder`](#json.JSONEncoder "json.JSONEncoder") 子類(比如:覆蓋了 `default()` 方法來序列化額外的類型), 通過 *cls* 關鍵字參數來指定;否則將使用 [`JSONEncoder`](#json.JSONEncoder "json.JSONEncoder")。 在 3.6 版更改: 所有的可選參數現在是 [keyword-only](../glossary.xhtml#keyword-only-parameter) 的了。 注解 與 [`pickle`](pickle.xhtml#module-pickle "pickle: Convert Python objects to streams of bytes and back.") 和 [`marshal`](marshal.xhtml#module-marshal "marshal: Convert Python objects to streams of bytes and back (with different constraints).") 不同,JSON 不是一個具有框架的協議,所以嘗試多次使用同一個 *fp* 調用 [`dump()`](#json.dump "json.dump") 來序列化多個對象會產生一個不合規的 JSON 文件。 `json.``dumps`(*obj*, *\**, *skipkeys=False*, *ensure\_ascii=True*, *check\_circular=True*, *allow\_nan=True*, *cls=None*, *indent=None*, *separators=None*, *default=None*, *sort\_keys=False*, *\*\*kw*)使用這個 [轉換表](#py-to-json-table) 將 *obj* 序列化為 JSON 格式的 [`str`](stdtypes.xhtml#str "str")。 其參數的含義與 [`dump()`](#json.dump "json.dump") 中的相同。 注解 JSON 中的鍵-值對中的鍵永遠是 [`str`](stdtypes.xhtml#str "str") 類型的。當一個對象被轉化為 JSON 時,字典中所有的鍵都會被強制轉換為字符串。這所造成的結果是字典被轉換為 JSON 然后轉換回字典時可能和原來的不相等。換句話說,如果 x 具有非字符串的鍵,則有 `loads(dumps(x)) != x`。 `json.``load`(*fp*, *\**, *cls=None*, *object\_hook=None*, *parse\_float=None*, *parse\_int=None*, *parse\_constant=None*, *object\_pairs\_hook=None*, *\*\*kw*)使用這個 [轉換表](#json-to-py-table) 將 *fp* (一個支持 `.read()` 并包含一個 JSON 文檔的 [text file](../glossary.xhtml#term-text-file) 或者 [binary file](../glossary.xhtml#term-binary-file)) 反序列化為一個 Python 對象。 *object\_hook* 是一個可選的函數,它會被調用于每一個解碼出的對象字面量(即一個 [`dict`](stdtypes.xhtml#dict "dict"))。*object\_hook* 的返回值會取代原本的 [`dict`](stdtypes.xhtml#dict "dict")。這一特性能夠被用于實現自定義解碼器(如 [JSON-RPC](http://www.jsonrpc.org) \[http://www.jsonrpc.org\] 的類型提示)。 *object\_pairs\_hook* is an optional function that will be called with the result of any object literal decoded with an ordered list of pairs. The return value of *object\_pairs\_hook* will be used instead of the [`dict`](stdtypes.xhtml#dict "dict"). This feature can be used to implement custom decoders. If *object\_hook* is also defined, the *object\_pairs\_hook* takes priority. 在 3.1 版更改: Added support for *object\_pairs\_hook*. *parse\_float*, if specified, will be called with the string of every JSON float to be decoded. By default, this is equivalent to `float(num_str)`. This can be used to use another datatype or parser for JSON floats (e.g. [`decimal.Decimal`](decimal.xhtml#decimal.Decimal "decimal.Decimal")). *parse\_int*, if specified, will be called with the string of every JSON int to be decoded. By default, this is equivalent to `int(num_str)`. This can be used to use another datatype or parser for JSON integers (e.g. [`float`](functions.xhtml#float "float")). *parse\_constant*, if specified, will be called with one of the following strings: `'-Infinity'`, `'Infinity'`, `'NaN'`. This can be used to raise an exception if invalid JSON numbers are encountered. 在 3.1 版更改: *parse\_constant* doesn't get called on 'null', 'true', 'false' anymore. To use a custom [`JSONDecoder`](#json.JSONDecoder "json.JSONDecoder") subclass, specify it with the `cls`kwarg; otherwise [`JSONDecoder`](#json.JSONDecoder "json.JSONDecoder") is used. Additional keyword arguments will be passed to the constructor of the class. If the data being deserialized is not a valid JSON document, a [`JSONDecodeError`](#json.JSONDecodeError "json.JSONDecodeError") will be raised. 在 3.6 版更改: 所有的可選參數現在是 [keyword-only](../glossary.xhtml#keyword-only-parameter) 的了。 在 3.6 版更改: *fp* can now be a [binary file](../glossary.xhtml#term-binary-file). The input encoding should be UTF-8, UTF-16 or UTF-32. `json.``loads`(*s*, *\**, *encoding=None*, *cls=None*, *object\_hook=None*, *parse\_float=None*, *parse\_int=None*, *parse\_constant=None*, *object\_pairs\_hook=None*, *\*\*kw*)Deserialize *s* (a [`str`](stdtypes.xhtml#str "str"), [`bytes`](stdtypes.xhtml#bytes "bytes") or [`bytearray`](stdtypes.xhtml#bytearray "bytearray")instance containing a JSON document) to a Python object using this [conversion table](#json-to-py-table). The other arguments have the same meaning as in [`load()`](#json.load "json.load"), except *encoding* which is ignored and deprecated. If the data being deserialized is not a valid JSON document, a [`JSONDecodeError`](#json.JSONDecodeError "json.JSONDecodeError") will be raised. 在 3.6 版更改: *s* can now be of type [`bytes`](stdtypes.xhtml#bytes "bytes") or [`bytearray`](stdtypes.xhtml#bytearray "bytearray"). The input encoding should be UTF-8, UTF-16 or UTF-32. ## Encoders and Decoders *class* `json.``JSONDecoder`(*\**, *object\_hook=None*, *parse\_float=None*, *parse\_int=None*, *parse\_constant=None*, *strict=True*, *object\_pairs\_hook=None*)Simple JSON decoder. Performs the following translations in decoding by default: JSON Python object dict array list string str 整數 int 非整數 float true True false False null None It also understands `NaN`, `Infinity`, and `-Infinity` as their corresponding `float` values, which is outside the JSON spec. *object\_hook*, if specified, will be called with the result of every JSON object decoded and its return value will be used in place of the given [`dict`](stdtypes.xhtml#dict "dict"). This can be used to provide custom deserializations (e.g. to support JSON-RPC class hinting). *object\_pairs\_hook*, if specified will be called with the result of every JSON object decoded with an ordered list of pairs. The return value of *object\_pairs\_hook* will be used instead of the [`dict`](stdtypes.xhtml#dict "dict"). This feature can be used to implement custom decoders. If *object\_hook* is also defined, the *object\_pairs\_hook* takes priority. 在 3.1 版更改: Added support for *object\_pairs\_hook*. *parse\_float*, if specified, will be called with the string of every JSON float to be decoded. By default, this is equivalent to `float(num_str)`. This can be used to use another datatype or parser for JSON floats (e.g. [`decimal.Decimal`](decimal.xhtml#decimal.Decimal "decimal.Decimal")). *parse\_int*, if specified, will be called with the string of every JSON int to be decoded. By default, this is equivalent to `int(num_str)`. This can be used to use another datatype or parser for JSON integers (e.g. [`float`](functions.xhtml#float "float")). *parse\_constant*, if specified, will be called with one of the following strings: `'-Infinity'`, `'Infinity'`, `'NaN'`. This can be used to raise an exception if invalid JSON numbers are encountered. If *strict* is false (`True` is the default), then control characters will be allowed inside strings. Control characters in this context are those with character codes in the 0--31 range, including `'\t'` (tab), `'\n'`, `'\r'` and `'\0'`. If the data being deserialized is not a valid JSON document, a [`JSONDecodeError`](#json.JSONDecodeError "json.JSONDecodeError") will be raised. 在 3.6 版更改: All parameters are now [keyword-only](../glossary.xhtml#keyword-only-parameter). `decode`(*s*)Return the Python representation of *s* (a [`str`](stdtypes.xhtml#str "str") instance containing a JSON document). [`JSONDecodeError`](#json.JSONDecodeError "json.JSONDecodeError") will be raised if the given JSON document is not valid. `raw_decode`(*s*)Decode a JSON document from *s* (a [`str`](stdtypes.xhtml#str "str") beginning with a JSON document) and return a 2-tuple of the Python representation and the index in *s* where the document ended. This can be used to decode a JSON document from a string that may have extraneous data at the end. *class* `json.``JSONEncoder`(*\**, *skipkeys=False*, *ensure\_ascii=True*, *check\_circular=True*, *allow\_nan=True*, *sort\_keys=False*, *indent=None*, *separators=None*, *default=None*)Extensible JSON encoder for Python data structures. Supports the following objects and types by default: Python JSON dict object list, tuple array str string int, float, int- & float-derived Enums number True true False false None null 在 3.4 版更改: Added support for int- and float-derived Enum classes. To extend this to recognize other objects, subclass and implement a [`default()`](#json.JSONEncoder.default "json.JSONEncoder.default") method with another method that returns a serializable object for `o` if possible, otherwise it should call the superclass implementation (to raise [`TypeError`](exceptions.xhtml#TypeError "TypeError")). If *skipkeys* is false (the default), then it is a [`TypeError`](exceptions.xhtml#TypeError "TypeError") to attempt encoding of keys that are not [`str`](stdtypes.xhtml#str "str"), [`int`](functions.xhtml#int "int"), [`float`](functions.xhtml#float "float") or `None`. If *skipkeys* is true, such items are simply skipped. 如果 *ensure\_ascii* 是 true (即默認值),輸出保證將所有輸入的非 ASCII 字符轉義。如果 *ensure\_ascii* 是 false,這些字符會原樣輸出。 If *check\_circular* is true (the default), then lists, dicts, and custom encoded objects will be checked for circular references during encoding to prevent an infinite recursion (which would cause an [`OverflowError`](exceptions.xhtml#OverflowError "OverflowError")). Otherwise, no such check takes place. If *allow\_nan* is true (the default), then `NaN`, `Infinity`, and `-Infinity` will be encoded as such. This behavior is not JSON specification compliant, but is consistent with most JavaScript based encoders and decoders. Otherwise, it will be a [`ValueError`](exceptions.xhtml#ValueError "ValueError") to encode such floats. If *sort\_keys* is true (default: `False`), then the output of dictionaries will be sorted by key; this is useful for regression tests to ensure that JSON serializations can be compared on a day-to-day basis. 如果 *indent* 是一個非負整數或者字符串,那么 JSON 數組元素和對象成員會被美化輸出為該值指定的縮進等級。如果縮進等級為零、負數或者 `""`,則只會添加換行符。`None``(默認值)選擇最緊湊的表達。使用一個正整數會讓每一層縮進同樣數量的空格。如果 *indent* 是一個字符串(比如 ``"\t"`),那個字符串會被用于縮進每一層。 在 3.2 版更改: 允許使用字符串作為 *indent* 而不再僅僅是整數。 當指定時,*separators* 應當是一個 `(item_separator, key_separator)` 元組。當 *indent* 為 `None` 時,默認值取 `(', ', ': ')`,否則取 `(',', ': ')`。為了得到最緊湊的 JSON 表達式,你應該指定其為 `(',', ':')` 以消除空白字符。 在 3.4 版更改: 現當 *indent* 不是 `None` 時,采用 `(',', ': ')` 作為默認值。 當 *default* 被指定時,其應該是一個函數,每當某個對象無法被序列化時它會被調用。它應該返回該對象的一個可以被 JSON 編碼的版本或者引發一個 [`TypeError`](exceptions.xhtml#TypeError "TypeError")。如果沒有被指定,則會直接引發 [`TypeError`](exceptions.xhtml#TypeError "TypeError")。 在 3.6 版更改: All parameters are now [keyword-only](../glossary.xhtml#keyword-only-parameter). `default`(*o*)Implement this method in a subclass such that it returns a serializable object for *o*, or calls the base implementation (to raise a [`TypeError`](exceptions.xhtml#TypeError "TypeError")). For example, to support arbitrary iterators, you could implement default like this: ``` def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o) ``` `encode`(*o*)Return a JSON string representation of a Python data structure, *o*. For example: ``` >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]}) '{"foo": ["bar", "baz"]}' ``` `iterencode`(*o*)Encode the given object, *o*, and yield each string representation as available. For example: ``` for chunk in json.JSONEncoder().iterencode(bigobject): mysocket.write(chunk) ``` ## 異常 *exception* `json.``JSONDecodeError`(*msg*, *doc*, *pos*)Subclass of [`ValueError`](exceptions.xhtml#ValueError "ValueError") with the following additional attributes: `msg`未格式化的錯誤消息。 `doc`The JSON document being parsed. `pos`The start index of *doc* where parsing failed. `lineno`The line corresponding to *pos*. `colno`The column corresponding to *pos*. 3\.5 新版功能. ## Standard Compliance and Interoperability The JSON format is specified by [**RFC 7159**](https://tools.ietf.org/html/rfc7159.html) \[https://tools.ietf.org/html/rfc7159.html\] and by [ECMA-404](http://www.ecma-international.org/publications/standards/Ecma-404.htm) \[http://www.ecma-international.org/publications/standards/Ecma-404.htm\]. This section details this module's level of compliance with the RFC. For simplicity, [`JSONEncoder`](#json.JSONEncoder "json.JSONEncoder") and [`JSONDecoder`](#json.JSONDecoder "json.JSONDecoder") subclasses, and parameters other than those explicitly mentioned, are not considered. This module does not comply with the RFC in a strict fashion, implementing some extensions that are valid JavaScript but not valid JSON. In particular: - Infinite and NaN number values are accepted and output; - Repeated names within an object are accepted, and only the value of the last name-value pair is used. Since the RFC permits RFC-compliant parsers to accept input texts that are not RFC-compliant, this module's deserializer is technically RFC-compliant under default settings. ### Character Encodings The RFC requires that JSON be represented using either UTF-8, UTF-16, or UTF-32, with UTF-8 being the recommended default for maximum interoperability. As permitted, though not required, by the RFC, this module's serializer sets *ensure\_ascii=True* by default, thus escaping the output so that the resulting strings only contain ASCII characters. Other than the *ensure\_ascii* parameter, this module is defined strictly in terms of conversion between Python objects and [`Unicode strings`](stdtypes.xhtml#str "str"), and thus does not otherwise directly address the issue of character encodings. The RFC prohibits adding a byte order mark (BOM) to the start of a JSON text, and this module's serializer does not add a BOM to its output. The RFC permits, but does not require, JSON deserializers to ignore an initial BOM in their input. This module's deserializer raises a [`ValueError`](exceptions.xhtml#ValueError "ValueError")when an initial BOM is present. The RFC does not explicitly forbid JSON strings which contain byte sequences that don't correspond to valid Unicode characters (e.g. unpaired UTF-16 surrogates), but it does note that they may cause interoperability problems. By default, this module accepts and outputs (when present in the original [`str`](stdtypes.xhtml#str "str")) code points for such sequences. ### Infinite and NaN Number Values The RFC does not permit the representation of infinite or NaN number values. Despite that, by default, this module accepts and outputs `Infinity`, `-Infinity`, and `NaN` as if they were valid JSON number literal values: ``` >>> # Neither of these calls raises an exception, but the results are not valid JSON >>> json.dumps(float('-inf')) '-Infinity' >>> json.dumps(float('nan')) 'NaN' >>> # Same when deserializing >>> json.loads('-Infinity') -inf >>> json.loads('NaN') nan ``` In the serializer, the *allow\_nan* parameter can be used to alter this behavior. In the deserializer, the *parse\_constant* parameter can be used to alter this behavior. ### Repeated Names Within an Object The RFC specifies that the names within a JSON object should be unique, but does not mandate how repeated names in JSON objects should be handled. By default, this module does not raise an exception; instead, it ignores all but the last name-value pair for a given name: ``` >>> weird_json = '{"x": 1, "x": 2, "x": 3}' >>> json.loads(weird_json) {'x': 3} ``` The *object\_pairs\_hook* parameter can be used to alter this behavior. ### Top-level Non-Object, Non-Array Values The old version of JSON specified by the obsolete [**RFC 4627**](https://tools.ietf.org/html/rfc4627.html) \[https://tools.ietf.org/html/rfc4627.html\] required that the top-level value of a JSON text must be either a JSON object or array (Python [`dict`](stdtypes.xhtml#dict "dict") or [`list`](stdtypes.xhtml#list "list")), and could not be a JSON null, boolean, number, or string value. [**RFC 7159**](https://tools.ietf.org/html/rfc7159.html) \[https://tools.ietf.org/html/rfc7159.html\] removed that restriction, and this module does not and has never implemented that restriction in either its serializer or its deserializer. Regardless, for maximum interoperability, you may wish to voluntarily adhere to the restriction yourself. ### Implementation Limitations Some JSON deserializer implementations may set limits on: - the size of accepted JSON texts - the maximum level of nesting of JSON objects and arrays - the range and precision of JSON numbers - the content and maximum length of JSON strings This module does not impose any such limits beyond those of the relevant Python datatypes themselves or the Python interpreter itself. When serializing to JSON, beware any such limitations in applications that may consume your JSON. In particular, it is common for JSON numbers to be deserialized into IEEE 754 double precision numbers and thus subject to that representation's range and precision limitations. This is especially relevant when serializing Python [`int`](functions.xhtml#int "int") values of extremely large magnitude, or when serializing instances of "exotic" numerical types such as [`decimal.Decimal`](decimal.xhtml#decimal.Decimal "decimal.Decimal"). ## Command Line Interface **Source code:** [Lib/json/tool.py](https://github.com/python/cpython/tree/3.7/Lib/json/tool.py) \[https://github.com/python/cpython/tree/3.7/Lib/json/tool.py\] - - - - - - The [`json.tool`](#module-json.tool "json.tool: A command line to validate and pretty-print JSON.") module provides a simple command line interface to validate and pretty-print JSON objects. If the optional `infile` and `outfile` arguments are not specified, [`sys.stdin`](sys.xhtml#sys.stdin "sys.stdin") and [`sys.stdout`](sys.xhtml#sys.stdout "sys.stdout") will be used respectively: ``` $ echo '{"json": "obj"}' | python -m json.tool { "json": "obj" } $ echo '{1.2:3.4}' | python -m json.tool Expecting property name enclosed in double quotes: line 1 column 2 (char 1) ``` 在 3.5 版更改: The output is now in the same order as the input. Use the [`--sort-keys`](#cmdoption-json-tool-sort-keys) option to sort the output of dictionaries alphabetically by key. ### Command line options `infile```The JSON file to be validated or pretty-printed: ``` $ python -m json.tool mp_films.json [ { "title": "And Now for Something Completely Different", "year": 1971 }, { "title": "Monty Python and the Holy Grail", "year": 1975 } ] ``` If *infile* is not specified, read from [`sys.stdin`](sys.xhtml#sys.stdin "sys.stdin"). `outfile```Write the output of the *infile* to the given *outfile*. Otherwise, write it to [`sys.stdout`](sys.xhtml#sys.stdout "sys.stdout"). `--sort-keys```Sort the output of dictionaries alphabetically by key. 3\.5 新版功能. `-h````, ``--help```Show the help message. 腳注 [1](#id1)As noted in [the errata for RFC 7159](https://www.rfc-editor.org/errata_search.php?rfc=7159) \[https://www.rfc-editor.org/errata\_search.php?rfc=7159\], JSON permits literal U+2028 (LINE SEPARATOR) and U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript (as of ECMAScript Edition 5.1) does not. ### 導航 - [索引](../genindex.xhtml "總目錄") - [模塊](../py-modindex.xhtml "Python 模塊索引") | - [下一頁](mailcap.xhtml "mailcap --- Mailcap file handling") | - [上一頁](email.iterators.xhtml "email.iterators: Iterators") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) ? - zh\_CN 3.7.3 [文檔](../index.xhtml) ? - [Python 標準庫](index.xhtml) ? - [互聯網數據處理](netdata.xhtml) ? - $('.inline-search').show(0); | ? [版權所有](../copyright.xhtml) 2001-2019, Python Software Foundation. Python 軟件基金會是一個非盈利組織。 [請捐助。](https://www.python.org/psf/donations/) 最后更新于 5月 21, 2019. [發現了問題](../bugs.xhtml)? 使用[Sphinx](http://sphinx.pocoo.org/)1.8.4 創建。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看