Hướng dẫn python json dumps sort keys - python json kết xuất các khóa sắp xếp

Mã nguồn: lib/json/__ init__.py Lib/json/__init__.py


JSON (ký hiệu đối tượng JavaScript), được chỉ định bởi RFC 7159 (trong đó lỗi thời RFC 4627) và bởi ECMA-404, là một định dạng trao đổi dữ liệu nhẹ lấy cảm hứng từ JavaScript Object Syntax (mặc dù nó không phải là một bản phụ của JavaScript 1).RFC 7159 (which obsoletes RFC 4627) and by ECMA-404, is a lightweight data interchange format inspired by JavaScript object literal syntax (although it is not a strict subset of JavaScript 1 ).

Cảnh báo

Hãy thận trọng khi phân tích dữ liệu JSON từ các nguồn không tin cậy. Một chuỗi JSON độc hại có thể khiến bộ giải mã tiêu thụ CPU và tài nguyên bộ nhớ đáng kể. Giới hạn kích thước của dữ liệu được phân tích cú pháp được khuyến nghị.

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
4 phơi bày API quen thuộc với người dùng của thư viện tiêu chuẩn
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
5 và
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
6.

Mã hóa phân cấp đối tượng Python cơ bản:

>>> 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"]'

Mã hóa nhỏ gọn:

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'

In đẹp:

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}

Giải mã 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']

Chuyên giải mã đối tượng 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')

Mở rộng

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
7:

>>> 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', ']']

Sử dụng

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
8 từ vỏ để xác thực và in đẹp:

$ 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)

Xem Giao diện dòng lệnh để biết tài liệu chi tiết.Command Line Interface for detailed documentation.

Ghi chú

JSON là một tập hợp con của YAML 1.2. JSON được sản xuất bởi các cài đặt mặc định của mô -đun này (đặc biệt là giá trị phân tách mặc định) cũng là một tập hợp con của YAML 1.0 và 1.1. Do đó, mô -đun này cũng có thể được sử dụng như một bộ tuần tự YAML.

Ghi chú

JSON là một tập hợp con của YAML 1.2. JSON được sản xuất bởi các cài đặt mặc định của mô -đun này (đặc biệt là giá trị phân tách mặc định) cũng là một tập hợp con của YAML 1.0 và 1.1. Do đó, mô -đun này cũng có thể được sử dụng như một bộ tuần tự YAML.

Bộ mã hóa và bộ giải mã mô -đun này bảo tồn thứ tự đầu vào và đầu ra theo mặc định. Thứ tự chỉ bị mất nếu các thùng chứa cơ bản không được đặt hàng.

Cách sử dụng cơ bảndump(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)

json.dump (obj, fp, *, skipKeys = false, đảm bảo_ascii = true, kiểm tra_circular = true ¶file-like object) using this conversion table.

Nối tiếp OBJ thành một luồng được định dạng JSON thành FP (một đối tượng giống như tệp 19 được hỗ trợ) bằng cách sử dụng bảng chuyển đổi này.

Nếu SkipKeys là đúng (mặc định:

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
0), thì các khóa Dict không thuộc loại cơ bản (
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
2,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
3,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
4,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5) sẽ bị bỏ qua thay vì tăng
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6.

Mô -đun

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
4 luôn tạo các đối tượng
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1, không phải đối tượng
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
9. Do đó,
>>> 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']
0 phải hỗ trợ đầu vào
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1.

Nếu đảm bảo_ascii là đúng (mặc định), đầu ra được đảm bảo sẽ có tất cả các ký tự không phải ASCII đến thoát. Nếu đảm bảo_ascii là sai, các ký tự này sẽ được xuất ra.

Nếu Check_Circular là sai (mặc định:

>>> 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']
2), thì kiểm tra tham chiếu tròn cho các loại container sẽ bị bỏ qua và tham chiếu tròn sẽ dẫn đến
>>> 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']
3 (hoặc tệ hơn).

Nếu allow_nan là sai (mặc định:

>>> 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']
2), thì đó sẽ là một
>>> 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']
5 để tuần tự hóa ra khỏi phạm vi
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
3 giá trị (
>>> 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']
7,
>>> 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']
8,
>>> 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']
9) tuân thủ nghiêm ngặt thông số kỹ thuật của JSON. Nếu allow_nan là đúng, các tương đương JavaScript của chúng (
>>> 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')
0,
>>> 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')
1,
>>> 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')
2) sẽ được sử dụng.

Nếu thụt lề là một số nguyên hoặc chuỗi không âm, thì các phần tử mảng JSON và các thành viên đối tượng sẽ được in khá đẹp với mức thụt lề đó. Mức thụt vào 0, âm hoặc

>>> 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')
3 sẽ chỉ chèn các dòng mới.
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5 (mặc định) chọn biểu diễn nhỏ gọn nhất. Sử dụng một số nguyên dương tích cực chỉ ra rằng nhiều không gian trên mỗi cấp độ. Nếu thụt lề là một chuỗi (chẳng hạn như
>>> 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')
5), chuỗi đó được sử dụng để thụt vào mỗi cấp độ.Allow strings for indent in addition to integers.

Đã thay đổi trong phiên bản 3.2: Cho phép các chuỗi cho thụt lề ngoài số nguyên.

Nếu được chỉ định, các dấu phân cách phải là một bộ

>>> 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')
6. Mặc định là
>>> 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')
7 nếu thụt lề là
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5 và
>>> 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')
9 nếu không. Để có được biểu diễn JSON nhỏ gọn nhất, bạn nên chỉ định
>>> 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', ']']
0 để loại bỏ khoảng trắng.Use
>>> 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')
9 as default if indent is not
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5.

Đã thay đổi trong phiên bản 3.4: Sử dụng

>>> 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')
9 làm mặc định nếu thụt lề không phải là
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5.

Nếu được chỉ định, mặc định phải là một hàm được gọi cho các đối tượng có thể được tuần tự hóa. Nó sẽ trả về một phiên bản có thể mã hóa JSON của đối tượng hoặc tăng

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6. Nếu không được chỉ định,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6 được nâng lên.

Nếu sort_keys là đúng (mặc định:

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
0), thì đầu ra của từ điển sẽ được sắp xếp theo khóa.

Để sử dụng một lớp con tùy chỉnh ____17 (ví dụ: một lớp ghi đè phương thức

>>> 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', ']']
7 để tuần tự hóa các loại bổ sung), chỉ định nó với CLS KWARG; Nếu không
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
7 được sử dụng.All optional parameters are now keyword-only.

Ghi chú

JSON là một tập hợp con của YAML 1.2. JSON được sản xuất bởi các cài đặt mặc định của mô -đun này (đặc biệt là giá trị phân tách mặc định) cũng là một tập hợp con của YAML 1.0 và 1.1. Do đó, mô -đun này cũng có thể được sử dụng như một bộ tuần tự YAML.

Bộ mã hóa và bộ giải mã mô -đun này bảo tồn thứ tự đầu vào và đầu ra theo mặc định. Thứ tự chỉ bị mất nếu các thùng chứa cơ bản không được đặt hàng.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)

Cách sử dụng cơ bảnconversion table. The arguments have the same meaning as in

$ 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)
1.

Ghi chú

JSON là một tập hợp con của YAML 1.2. JSON được sản xuất bởi các cài đặt mặc định của mô -đun này (đặc biệt là giá trị phân tách mặc định) cũng là một tập hợp con của YAML 1.0 và 1.1. Do đó, mô -đun này cũng có thể được sử dụng như một bộ tuần tự YAML.

json.load (fp, *, cls = none, object_hook = none, parse_float = none, parse_int = none, parse_constant = none, object_pairs_hook = none, ** kw) ¶load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

Deserialize FP (tệp văn bản hoặc tệp nhị phân hỗ trợ ____ 66 có chứa tài liệu JSON) đến đối tượng Python bằng cách sử dụng bảng chuyển đổi này.text file or binary file containing a JSON document) to a Python object using this conversion table.

Object_hook là một hàm tùy chọn sẽ được gọi với kết quả của bất kỳ đối tượng nào được giải mã theo nghĩa đen (A

$ 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)
7). Giá trị trả về của Object_hook sẽ được sử dụng thay vì
$ 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)
7. Tính năng này có thể được sử dụng để triển khai bộ giải mã tùy chỉnh (ví dụ: gợi ý lớp JSON-RPC).

Object_Pairs_hook là một chức năng tùy chọn sẽ được gọi với kết quả của bất kỳ đối tượng nào được giải mã với một danh sách các cặp được đặt hàng. Giá trị trả về của Object_Pairs_hook sẽ được sử dụng thay vì

$ 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)
7. Tính năng này có thể được sử dụng để thực hiện bộ giải mã tùy chỉnh. Nếu Object_hook cũng được xác định, Object_Pairs_hook được ưu tiên.

Đã thay đổi trong phiên bản 3.1: Đã thêm hỗ trợ cho Object_Pairs_Hook.Added support for object_pairs_hook.

parse_float, nếu được chỉ định, sẽ được gọi với chuỗi của mỗi float JSON để được giải mã. Theo mặc định, điều này tương đương với

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)
0. Điều này có thể được sử dụng để sử dụng một kiểu dữ liệu hoặc trình phân tích cú pháp khác cho các floats JSON (ví dụ:
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)
1).

Parse_int, nếu được chỉ định, sẽ được gọi với chuỗi của mỗi JSON int sẽ được giải mã. Theo mặc định, điều này tương đương với

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)
2. Điều này có thể được sử dụng để sử dụng một kiểu dữ liệu hoặc trình phân tích cú pháp khác cho số nguyên JSON (ví dụ:
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
3).

Đã thay đổi trong phiên bản 3.11: Parse_int mặc định của

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)
4 Bây giờ giới hạn độ dài tối đa của chuỗi số nguyên thông qua giới hạn độ dài chuyển đổi chuỗi số nguyên của trình thông dịch để giúp tránh từ chối các cuộc tấn công dịch vụ.The default parse_int of
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)
4 now limits the maximum length of the integer string via the interpreter’s integer string conversion length limitation to help avoid denial of service attacks.

parse_constant, nếu được chỉ định, sẽ được gọi với một trong các chuỗi sau:

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)
5,
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)
6,
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)
7. Điều này có thể được sử dụng để tăng một ngoại lệ nếu gặp số JSON không hợp lệ.

Đã thay đổi trong phiên bản 3.1: parse_constant không được gọi trên ‘null,‘ true, ’sai nữa.parse_constant doesn’t get called on ‘null’, ‘true’, ‘false’ anymore.

Để sử dụng lớp con tùy chỉnh ____78, chỉ định nó với

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)
9 kwarg; Nếu không
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)
8 được sử dụng. Các đối số từ khóa bổ sung sẽ được chuyển cho hàm tạo của lớp.

Nếu dữ liệu được khử trùng không phải là một tài liệu JSON hợp lệ, một

>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
1 sẽ được nêu ra.

Đã thay đổi trong phiên bản 3.6: Tất cả các tham số tùy chọn hiện chỉ có từ khóa.All optional parameters are now keyword-only.

Đã thay đổi trong phiên bản 3.6: FP hiện có thể là một tệp nhị phân. Mã hóa đầu vào phải là UTF-8, UTF-16 hoặc UTF-32.fp can now be a binary file. The input encoding should be UTF-8, UTF-16 or UTF-32.

json.loads (s, *, cls = none, object_hook = none, parse_float = none, parse_int = none, parse_constant = noneloads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

Deserialize S (A

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
9 hoặc
>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
4 có chứa tài liệu JSON) đến đối tượng Python bằng cách sử dụng bảng chuyển đổi này.conversion table.

Các đối số khác có ý nghĩa tương tự như trong

>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
5.

Nếu dữ liệu được khử trùng không phải là một tài liệu JSON hợp lệ, một

>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
1 sẽ được nêu ra.

Đã thay đổi trong phiên bản 3.6: Tất cả các tham số tùy chọn hiện chỉ có từ khóa.s can now be of type

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
9 or
>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
4. The input encoding should be UTF-8, UTF-16 or UTF-32.

Đã thay đổi trong phiên bản 3.6: FP hiện có thể là một tệp nhị phân. Mã hóa đầu vào phải là UTF-8, UTF-16 hoặc UTF-32.The keyword argument encoding has been removed.

json.loads (s, *, cls = none, object_hook = none, parse_float = none, parse_int = none, parse_constant = none

Deserialize S (A
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
9 hoặc
>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
4 có chứa tài liệu JSON) đến đối tượng Python bằng cách sử dụng bảng chuyển đổi này.
json.JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)

Các đối số khác có ý nghĩa tương tự như trong

>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
5.

Đã thay đổi trong phiên bản 3.6: S hiện có thể thuộc loại

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
9 hoặc
>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
4. Mã hóa đầu vào phải là UTF-8, UTF-16 hoặc UTF-32.

Thay đổi trong phiên bản 3.9: Mã hóa đối số từ khóa đã bị xóa.

Bộ mã hóa và bộ giải mã

classjson.jsondecoder (*, object_hook = none, parse_float = none, parse_int = none, parse_constant = none, strict = true

Bộ giải mã JSON đơn giản.

Thực hiện các bản dịch sau trong giải mã theo mặc định:

Json

Python

sự vật

DIGN

int

mảng

float

true

danh sách

false

sợi dây

null

str

Số (int)

số (thực)

ĐÚNG VẬY

Đã thay đổi trong phiên bản 3.1: Đã thêm hỗ trợ cho Object_Pairs_Hook.Added support for object_pairs_hook.

parse_float, nếu được chỉ định, sẽ được gọi với chuỗi của mỗi float JSON để được giải mã. Theo mặc định, điều này tương đương với

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)
0. Điều này có thể được sử dụng để sử dụng một kiểu dữ liệu hoặc trình phân tích cú pháp khác cho các floats JSON (ví dụ:
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)
1).

Parse_int, nếu được chỉ định, sẽ được gọi với chuỗi của mỗi JSON int sẽ được giải mã. Theo mặc định, điều này tương đương với

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)
2. Điều này có thể được sử dụng để sử dụng một kiểu dữ liệu hoặc trình phân tích cú pháp khác cho số nguyên JSON (ví dụ:
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
3).

parse_constant, nếu được chỉ định, sẽ được gọi với một trong các chuỗi sau:

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)
5,
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)
6,
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)
7. Điều này có thể được sử dụng để tăng một ngoại lệ nếu gặp số JSON không hợp lệ.

Nếu nghiêm ngặt là sai (

>>> 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']
2 là mặc định), thì các ký tự điều khiển sẽ được phép bên trong chuỗi. Các ký tự điều khiển trong bối cảnh này là các ký tự có mã ký tự trong phạm vi 0 Ném31, bao gồm
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
03 (tab),
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
04,
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
05 và
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
06.

Nếu dữ liệu được khử trùng không phải là một tài liệu JSON hợp lệ, một

>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
1 sẽ được nêu ra.

Đã thay đổi trong phiên bản 3.6: Tất cả các tham số hiện chỉ có từ khóa.All parameters are now keyword-only.

Decode (s)(s)

Trả về biểu diễn Python của S (một ví dụ

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1 chứa tài liệu JSON).

>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
1 sẽ được nêu ra nếu tài liệu JSON đã cho không hợp lệ.

Raw_Decode (S)(s)

Giải mã một tài liệu JSON từ S (A

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1 bắt đầu bằng tài liệu JSON) và trả về 2-Tuple của biểu diễn Python và chỉ mục trong S nơi tài liệu kết thúc.

Điều này có thể được sử dụng để giải mã một tài liệu JSON từ một chuỗi có thể có dữ liệu không liên quan ở cuối.

classjson.jsonencoder (*, skipKeys = false, đảm bảo_ascii = true, kiểm tra_circular = truejson.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

Bộ mã hóa JSON mở rộng cho các cấu trúc dữ liệu Python.

Hỗ trợ các đối tượng và loại sau theo mặc định:

Python

Json

DIGN

sự vật

Danh sách, tuple

mảng

str

sợi dây

int, float, int- & float có nguồn gốc từ

con số

ĐÚNG VẬY

true

Sai

false

Không có

null

Đã thay đổi trong phiên bản 3.4: Đã thêm hỗ trợ cho các lớp Enum có nguồn gốc từ INT và float.Added support for int- and float-derived Enum classes.

Để mở rộng điều này để nhận biết các đối tượng khác, lớp con và thực hiện phương thức

>>> 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', ']']
7 với một phương thức khác trả về một đối tượng có thể nối tiếp cho
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
12 nếu có thể, nếu không, nó nên gọi quá trình triển khai siêu lớp (để tăng
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6).

Nếu SkipKeys là sai (mặc định),

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6 sẽ được nâng lên khi cố gắng mã hóa các khóa không phải là
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
2,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
3 hoặc
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5. Nếu SkipKeys là đúng, các mục như vậy chỉ đơn giản là bỏ qua.

Nếu đảm bảo_ascii là đúng (mặc định), đầu ra được đảm bảo sẽ có tất cả các ký tự không phải ASCII đến thoát. Nếu đảm bảo_ascii là sai, các ký tự này sẽ được xuất ra.

Nếu Check_circular là đúng (mặc định), thì các danh sách, dicts và các đối tượng được mã hóa tùy chỉnh sẽ được kiểm tra các tham chiếu tròn trong quá trình mã hóa để ngăn chặn đệ quy vô hạn (sẽ gây ra

>>> 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']
3). Nếu không, không có kiểm tra như vậy diễn ra.

Nếu allow_nan là đúng (mặc định), thì

>>> 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')
0,
>>> 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')
1 và
>>> 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')
2 sẽ được mã hóa như vậy. Hành vi này không tuân thủ đặc tả JSON, nhưng phù hợp với hầu hết các bộ mã hóa và bộ giải mã dựa trên JavaScript. Nếu không, nó sẽ là một
>>> 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']
5 để mã hóa những chiếc phao như vậy.

Nếu sort_keys là đúng (mặc định:

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
0), thì đầu ra của từ điển sẽ được sắp xếp theo khóa; Điều này rất hữu ích cho các bài kiểm tra hồi quy để đảm bảo rằng các tuần tự JSON có thể được so sánh trên cơ sở hàng ngày.

Nếu thụt lề là một số nguyên hoặc chuỗi không âm, thì các phần tử mảng JSON và các thành viên đối tượng sẽ được in khá đẹp với mức thụt lề đó. Mức thụt vào 0, âm hoặc

>>> 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')
3 sẽ chỉ chèn các dòng mới.
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5 (mặc định) chọn biểu diễn nhỏ gọn nhất. Sử dụng một số nguyên dương tích cực chỉ ra rằng nhiều không gian trên mỗi cấp độ. Nếu thụt lề là một chuỗi (chẳng hạn như
>>> 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')
5), chuỗi đó được sử dụng để thụt vào mỗi cấp độ.

Đã thay đổi trong phiên bản 3.2: Cho phép các chuỗi cho thụt lề ngoài số nguyên.Allow strings for indent in addition to integers.

Nếu được chỉ định, các dấu phân cách phải là một bộ

>>> 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')
6. Mặc định là
>>> 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')
7 nếu thụt lề là
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5 và
>>> 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')
9 nếu không. Để có được biểu diễn JSON nhỏ gọn nhất, bạn nên chỉ định
>>> 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', ']']
0 để loại bỏ khoảng trắng.

Đã thay đổi trong phiên bản 3.4: Sử dụng

>>> 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')
9 làm mặc định nếu thụt lề không phải là
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5.Use
>>> 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')
9 as default if indent is not
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5.

Nếu được chỉ định, mặc định phải là một hàm được gọi cho các đối tượng có thể được tuần tự hóa. Nó sẽ trả về một phiên bản có thể mã hóa JSON của đối tượng hoặc tăng

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6. Nếu không được chỉ định,
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6 được nâng lên.

Đã thay đổi trong phiên bản 3.6: Tất cả các tham số hiện chỉ có từ khóa.All parameters are now keyword-only.

mặc định (o) ¶(o)

Thực hiện phương pháp này trong một lớp con sao cho nó trả về một đối tượng có thể nối tiếp cho O hoặc gọi việc thực hiện cơ sở (để tăng

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6).

Ví dụ: để hỗ trợ các trình lặp tùy ý, bạn có thể thực hiện

>>> 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', ']']
7 như thế này:

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)

mã hóa (o)(o)

Trả về một biểu diễn chuỗi JSON của cấu trúc dữ liệu Python, o. Ví dụ:

>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'

iterencode (o) ¶(o)

Mã hóa đối tượng đã cho, O và mang lại từng biểu diễn chuỗi là có sẵn. Ví dụ:

for chunk in json.JSONEncoder().iterencode(bigobject):
    mysocket.write(chunk)

Ngoại lệ ha

ExceptionJson.jSondecodeError (MSG, DOC, POS) ¶json.JSONDecodeError(msg, doc, pos)

Lớp con của

>>> 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']
5 với các thuộc tính bổ sung sau:

tin nhắn

Thông báo lỗi chưa được định dạng.

tài liệu

Tài liệu JSON được phân tích cú pháp.

vị của nước này

Chỉ số bắt đầu của tài liệu nơi phân tích cú pháp thất bại.

vải mỏng

Dòng tương ứng với POS.

một thứ lớn tiếng

Cột tương ứng với POS.

Mới trong phiên bản 3.5.

Tuân thủ tiêu chuẩn và khả năng tương tác

Định dạng JSON được chỉ định bởi RFC 7159 và ECMA-404. Phần này chi tiết mức độ tuân thủ mô -đun này với RFC. Để đơn giản, các lớp con

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
7 và
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)
8 và các tham số khác ngoài những phân loại được đề cập rõ ràng, không được xem xét.RFC 7159 and by ECMA-404. This section details this module’s level of compliance with the RFC. For simplicity,
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
7 and
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)
8 subclasses, and parameters other than those explicitly mentioned, are not considered.

Mô -đun này không tuân thủ RFC theo kiểu nghiêm ngặt, thực hiện một số tiện ích mở rộng là JavaScript hợp lệ nhưng không hợp lệ JSON. Đặc biệt:

  • Giá trị số vô hạn và NAN được chấp nhận và đầu ra;

  • Tên lặp lại trong một đối tượng được chấp nhận và chỉ có giá trị của cặp giá trị tên cuối cùng được sử dụng.

Do RFC cho phép trình phân tích cú pháp tuân thủ RFC chấp nhận các văn bản đầu vào không tuân thủ RFC, nên mô-đun này là trình phân hủy về mặt kỹ thuật tuân thủ RFC trong các cài đặt mặc định.

Mã hóa ký tự

RFC yêu cầu JSON phải được biểu diễn bằng UTF-8, UTF-16 hoặc UTF-32, với UTF-8 là mặc định được đề xuất cho khả năng tương tác tối đa.

Mặc dù không được phép, mặc dù không cần thiết, bởi RFC, bộ nối tiếp mô -đun này đặt đảm bảo_ascii = true theo mặc định, do đó thoát ra đầu ra để các chuỗi kết quả chỉ chứa các ký tự ASCII.

Khác với tham số đảm bảo_ascii, mô -đun này được xác định nghiêm ngặt về mặt chuyển đổi giữa các đối tượng Python và

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
42, và do đó không trực tiếp giải quyết vấn đề mã hóa ký tự.

RFC cấm thêm dấu lệnh byte (BOM) vào đầu văn bản JSON và bộ tuần tự mô -đun này không thêm BOM vào đầu ra của nó. RFC cho phép, nhưng không yêu cầu, JSON Deserializer phải bỏ qua một BOM ban đầu trong đầu vào của họ. Bộ khử loại mô -đun này tăng

>>> 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']
5 khi có BOM ban đầu.

RFC không cấm các chuỗi JSON có chứa các chuỗi byte không tương ứng với các ký tự unicode hợp lệ (ví dụ: người thay thế UTF-16 không ghép đôi), nhưng điều đó lưu ý rằng chúng có thể gây ra các vấn đề về khả năng tương tác. Theo mặc định, mô -đun này chấp nhận và đầu ra (khi có trong các điểm mã

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1) ban đầu cho các chuỗi đó.

Giá trị số vô hạn và NAN

RFC không cho phép biểu diễn các giá trị số vô hạn hoặc NAN. Mặc dù vậy, theo mặc định, mô -đun này chấp nhận và đầu ra

>>> 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')
1,
>>> 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')
2 và
>>> 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')
0 như thể chúng là các giá trị theo nghĩa đen số JSON hợp lệ:

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
0

Trong bộ tuần tự, tham số allow_nan có thể được sử dụng để thay đổi hành vi này. Trong Deserializer, tham số parse_constant có thể được sử dụng để thay đổi hành vi này.

Tên lặp đi lặp lại trong một đối tượng Ex

RFC chỉ định rằng các tên trong một đối tượng JSON phải là duy nhất, nhưng không bắt buộc làm thế nào các tên lặp lại trong các đối tượng JSON nên được xử lý. Theo mặc định, mô -đun này không nêu ra một ngoại lệ; Thay vào đó, nó bỏ qua tất cả trừ cặp giá trị tên cuối cùng cho một tên nhất định:

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
1

Tham số object_pairs_hook có thể được sử dụng để thay đổi hành vi này.

Các giá trị không đối tượng cấp cao nhất, không phải là giá trị

Phiên bản cũ của JSON được chỉ định bởi RFC 4627 lỗi thời yêu cầu rằng giá trị cấp cao nhất của văn bản JSON phải là đối tượng JSON hoặc mảng (Python

$ 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)
7 hoặc
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
49) và không thể là JSON NULL, Boolean, Number, hoặc Chuỗi giá trị. RFC 7159 đã loại bỏ sự hạn chế đó và mô -đun này không và chưa bao giờ thực hiện hạn chế đó trong bộ tuần tự hoặc trình phân hủy của nó.RFC 4627 required that the top-level value of a JSON text must be either a JSON object or array (Python
$ 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)
7 or
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
49), and could not be a JSON null, boolean, number, or string value. RFC 7159 removed that restriction, and this module does not and has never implemented that restriction in either its serializer or its deserializer.

Bất kể, cho khả năng tương tác tối đa, bạn có thể muốn tự nguyện tuân thủ các hạn chế.

Hạn chế thực hiện

Một số triển khai Deserializer của JSON có thể đặt giới hạn trên:

  • Kích thước của các văn bản JSON được chấp nhận

  • Mức độ lồng tối đa của các đối tượng và mảng JSON

  • Phạm vi và độ chính xác của số JSON

  • Nội dung và độ dài tối đa của chuỗi JSON

Mô -đun này không áp đặt bất kỳ giới hạn nào như vậy ngoài bản thân các kiểu dữ liệu Python có liên quan hoặc chính trình thông dịch Python.

Khi tuần tự hóa thành JSON, hãy cẩn thận với mọi hạn chế như vậy trong các ứng dụng có thể tiêu thụ JSON của bạn. Cụ thể, thông thường các số JSON được phân rã thành các số chính xác kép của IEEE 754 và do đó tuân theo phạm vi biểu diễn và giới hạn chính xác của biểu diễn đó. Điều này đặc biệt có liên quan khi tuần tự hóa các giá trị Python

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
2 có độ lớn cực lớn hoặc khi tuần tự hóa các trường hợp của các loại số kỳ lạ của Hồi như
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)
1.

Giao diện dòng lệnh

Mã nguồn: lib/json/tool.py Lib/json/tool.py


Mô-đun

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
8 cung cấp giao diện dòng lệnh đơn giản để xác thực và các đối tượng JSON in khá đẹp.

Nếu các đối số

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
53 và
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
54 tùy chọn không được chỉ định,
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
55 và
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
56 sẽ được sử dụng tương ứng:

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
2

Đã thay đổi trong phiên bản 3.5: Đầu ra hiện có cùng thứ tự với đầu vào. Sử dụng tùy chọn

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
57 để sắp xếp đầu ra của từ điển theo thứ tự bảng chữ cái theo khóa.The output is now in the same order as the input. Use the
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
57 option to sort the output of dictionaries alphabetically by key.

Tùy chọn dòng lệnh Jo

trong tập tin¶

Tệp JSON được xác thực hoặc được in khá:

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
3

Nếu không được chỉ định, hãy đọc từ

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
55.

trang phục

Viết đầu ra của Infile vào trang phục đã cho. Nếu không, hãy viết nó vào

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
56.

.

Sắp xếp đầu ra của từ điển theo thứ tự bảng chữ cái theo khóa.

Mới trong phiên bản 3.5.

.

Vô hiệu hóa việc thoát các ký tự không phải ASCII, xem

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
60 để biết thêm thông tin.

Mới trong phiên bản 3.9.

--Json-lines¶

Phân tích mọi dòng đầu vào dưới dạng đối tượng JSON riêng biệt.

Mới trong phiên bản 3.8.

-Indindent,-tab,-không có suy nghĩ,-Compact¶,--tab, --no-indent,--compact

Các tùy chọn loại trừ lẫn nhau để kiểm soát khoảng trắng.

Mới trong phiên bản 3.9.

--Json-lines¶,--help

Phân tích mọi dòng đầu vào dưới dạng đối tượng JSON riêng biệt.

Mới trong phiên bản 3.8.

1

-Indindent,-tab,-không có suy nghĩ,-Compact¶

Làm thế nào để bạn sắp xếp một bãi rác json trong Python?

Sử dụng hàm json.dumps () là một cách để sắp xếp đối tượng JSON. Nó được sử dụng để chuyển đổi mảng các đối tượng JSON thành một đối tượng JSON được sắp xếp. Giá trị của đối số Sort_Keys của hàm Dumps () sẽ yêu cầu phải đặt đúng để tạo các đối tượng JSON được sắp xếp từ mảng các đối tượng JSON. dumps() function is one way to sort the JSON object. It is used to convert the array of JSON objects into a sorted JSON object. The value of the sort_keys argument of the dumps() function will require to set True to generate the sorted JSON objects from the array of JSON objects.

Làm cách nào để sắp xếp một khóa JSON?

Nhập JSON của bạn vào vùng văn bản đầu tiên hoặc kéo và thả tệp, sau, chọn phương thức sắp xếp bạn sẽ sử dụng, giá trị khóa yêu cầu tên khóa (nếu không được chỉ định chọn phím đầu tiên), nhấp vào nút ví dụ đểNhận một ý tưởng về cách nó hoạt động.Kết quả sẽ tự động sắp xếp và hiển thị trong khu vực văn bản đầu ra.

JSON có đổ rác bảo quản trật tự không?

Có, thứ tự của các yếu tố trong mảng JSON được bảo tồn.Từ RFC 7159 -THE JavaScript ký hiệu đối tượng (JSON) Định dạng trao đổi dữ liệu (nhấn mạnh của tôi): Một đối tượng là một tập hợp không có thứ tự hoặc nhiều cặp tên/giá trị, trong đó tên là chuỗi và giá trị là một chuỗi, số, boolean, null, đối tượng hoặc mảng.. From RFC 7159 -The JavaScript Object Notation (JSON) Data Interchange Format (emphasis mine): An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

Sự khác biệt giữa bãi rác và dumps () json trong Python là gì?

Phương thức Dump () được sử dụng để ghi đối tượng được tuần tự hóa Python dưới dạng JSON được định dạng dữ liệu thành một phương thức file.json.dumps () được sử dụng để mã hóa bất kỳ đối tượng Python nào thành chuỗi được định dạng JSON. json. dumps() method is used to encodes any Python object into JSON formatted String.