Từ điển giải tuần tự hóa Python

JSON (Ký hiệu đối tượng JavaScript), được chỉ định bởi RFC 7159 (đã 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ừ cú pháp chữ của đối tượng JavaScript (mặc dù nó không phải là một tập hợp con nghiêm ngặt của JavaScript)

Cảnh báo

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

hiển thị API quen thuộc với người dùng thư viện và mô-đun chuẩn

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
>>> 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 từ trình bao để 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 tài liệu chi tiết

Ghi chú

JSON là một tập hợp con của YAML 1. 2. JSON được tạo bởi cài đặt mặc định của mô-đun này (cụ thể là giá trị dấu phân cá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 làm bộ nối tiếp YAML

Ghi chú

Theo mặc định, bộ mã hóa và bộ giải mã của mô-đun này duy trì thứ tự đầu vào và đầu ra. Đơn hàng chỉ bị mất nếu các thùng chứa bên dưới không có thứ tự

Sử dụng cơ bản

json. kết xuất(obj , fp , * , bỏ qua phím= Sai , ensure_ascii=Đúng , check_circular=True , allow_nan=True , cls =Không có , thụt lề= Không có , dấu phân cách=Không có , mặc định=Không có , sort_keys=Sai , * *kw)

Tuần tự hóa obj dưới dạng luồng được định dạng JSON thành fp (hỗ trợ

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
0) bằng cách sử dụng cái này

Nếu phím bỏ qua là đúng (mặc định.

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1), sau đó nói các khóa 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
}
6) sẽ bị bỏ qua thay vì tăng một

Mô-đun luôn tạo ra các đối tượng, không phải đối tượng. 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']
1 phải hỗ trợ đầu vào

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

Nếu check_circular là false (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']
3), thì việc kiểm tra tham chiếu vòng cho các loại vùng chứa sẽ bị bỏ qua và tham chiếu vòng sẽ dẫn đến (hoặc tệ hơn)

Nếu allow_nan là false (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']
3), thì sẽ phải tuần tự hóa các giá trị nằm ngoài phạm vi (
>>> 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,
>>> 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) tuân thủ nghiêm ngặt đặc tả JSON. Nếu allow_nan là true, JavaScript tương đương 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')
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,
>>> 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ẽ đượ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 đẹp với mức thụt lề đó. Mức thụt lề bằng 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')
4 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
}
6 (mặc định) chọn biểu diễn nhỏ gọn nhất. Sử dụng một số nguyên dương thụt lề nhiều khoảng trắng 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')
6), chuỗi đó được dùng để thụt lề mỗi cấp

Đã thay đổi trong phiên bản 3. 2. Cho phép thụt lề chuỗi bên cạnh số nguyên.

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

>>> 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. Giá trị 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')
8 nếu thụt lề là
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6 và ngược lại là
>>> 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. Để 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', ']']
1 để loại bỏ khoảng trắng

Đã thay đổi trong phiên bản 3. 4. Sử dụng

>>> 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 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
}
6.

Nếu được chỉ định, mặc định phải là một hàm được gọi cho các đối tượng không 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 một. Nếu không được chỉ định, nó sẽ được nâng lên

Nếu sort_keys là true (mặc định.

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
1) 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 (e. g. một 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', ']']
8 để sắp xếp theo thứ tự các loại bổ sung), chỉ định nó bằng cls kwarg;

Đã thay đổi trong phiên bản 3. 6. Tất cả các tham số tùy chọn hiện.

Ghi chú

Không giống như và , JSON không phải là một giao thức được đóng khung, do đó, việc cố gắng tuần tự hóa nhiều đối tượng bằng các lệnh gọi lặp lại để sử dụng cùng một fp sẽ dẫn đến một tệp JSON không hợp lệ

json. kết xuất(obj , * , bỏ qua phím=Sai , ensure_ascii=True , check_circular =True , allow_nan= Đúng , cls=Không , thụt lề=Không có , dấu phân cách=Không có , mặc định =Không có , sort_keys= Sai , **kw )

Nối tiếp obj thành JSON được định dạng bằng cái này. Các đối số có cùng ý nghĩa như trong

Ghi chú

Các khóa trong cặp khóa/giá trị của JSON luôn thuộc loại. Khi một từ điển được chuyển đổi thành JSON, tất cả các khóa của từ điển sẽ bị ép thành chuỗi. Do đó, nếu một từ điển được chuyển đổi thành JSON và sau đó trở lại thành một từ điển, thì từ điển đó có thể không giống với từ điển gốc. Nghĩa là,

$ 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)
6 nếu x có khóa không phải chuỗi

json. tải(fp , * , cls=Không có , object_hook=Không có , parse_float =Không có , parse_int= Không có , parse_constant=Không có , object_pairs_hook=Không có , **kw)

Deserialize fp (một tài liệu JSON hỗ trợ hoặc chứ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) thành một đối tượng Python bằng cái này

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

object_pairs_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ã bằng một danh sách các cặp được sắp xếp theo thứ tự. Giá trị trả về của object_pairs_hook sẽ được sử dụng thay vì. Tính năng này có thể được sử dụng để triển khai bộ giải mã tùy chỉnh. Nếu object_hook cũng được xác định, thì object_pairs_hook sẽ được ưu tiên

Đã thay đổi trong phiên bản 3. 1. Đã thêm hỗ trợ cho 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

>>> 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']
31. Đ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 float JSON (e. g. )

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

>>> 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']
33. Đ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 số nguyên JSON (e. g. )

Đã thay đổi trong phiên bản 3. 11. Pars_int mặc định hiện giới hạn độ dài tối đa của chuỗi số nguyên thông qua trình thông dịch để giúp tránh các cuộc tấn công từ chối dịch vụ.

parse_constant, nếu được chỉ định, sẽ được gọi bằng một trong các chuỗi sau.

>>> 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']
36,
>>> 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']
37,
>>> 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']
38. Điều này có thể được sử dụng để đưa ra một ngoại lệ nếu gặp phải số JSON không hợp lệ

Đã thay đổi trong phiên bản 3. 1. parse_constant không còn được gọi trên 'null', 'true', 'false' nữa.

Để sử dụng một lớp con tùy chỉnh, hãy chỉ định nó bằ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']
80 kwarg; . Các đối số từ khóa bổ sung sẽ được chuyển đến hàm tạo của lớp

Nếu dữ liệu đang được deserialized không phải là tài liệu JSON hợp lệ, thì a sẽ được nâng lên

Đã thay đổi trong phiên bản 3. 6. Tất cả các tham số tùy chọn hiện.

Đã thay đổi trong phiên bản 3. 6. fp bây giờ có thể là một. Mã hóa đầu vào phải là UTF-8, UTF-16 hoặc UTF-32.

json. tải(s , * , cls=Không có , object_hook=Không có , parse_float =Không có , parse_int= Không có , parse_constant=Không có , object_pairs_hook=Không có , **kw)

Giải tuần tự hóa s (a hoặc phiên bản chứa tài liệu JSON) thành đối tượng Python bằng cách sử dụng cái này

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

Nếu dữ liệu đang được deserialized không phải là tài liệu JSON hợp lệ, thì a sẽ được nâng lên

Đã thay đổi trong phiên bản 3. 6. s bây giờ có thể là loại hoặc. 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à giải mã

lớp json. JSONDecoder(* , object_hook =Không có , parse_float= Không có , parse_int=Không có , parse_constant=Không có , nghiêm ngặt=True , object_pairs_hook =Không)

Một 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

con trăn

vật

mệnh lệnh

mảng

danh sách

chuỗi

str

số (int)

int

số (thực)

trôi nổi

thật

Thật

nói dối

Sai

vô giá trị

Không có

Nó cũng hiểu

>>> 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')
3 là các giá trị
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
4 tương ứng của chúng, nằm ngoài thông số kỹ thuật JSON

object_hook, nếu được chỉ định, sẽ được gọi với kết quả của mọi đối tượng JSON được giải mã và giá trị trả về của nó sẽ được sử dụng thay cho giá trị đã cho. Điều này có thể được sử dụng để cung cấp giải tuần tự hóa tùy chỉnh (e. g. để hỗ trợ gợi ý lớp JSON-RPC)

object_pairs_hook, nếu được chỉ định sẽ được gọi với kết quả của mọi đối tượng JSON được giải mã bằng danh sách các cặp được sắp xếp theo thứ tự. Giá trị trả về của object_pairs_hook sẽ được sử dụng thay vì. Tính năng này có thể được sử dụng để triển khai bộ giải mã tùy chỉnh. Nếu object_hook cũng được xác định, thì object_pairs_hook sẽ được ưu tiên

Đã thay đổi trong phiên bản 3. 1. Đã thêm hỗ trợ cho 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

>>> 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']
31. Đ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 float JSON (e. g. )

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

>>> 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']
33. Đ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 số nguyên JSON (e. g. )

parse_constant, nếu được chỉ định, sẽ được gọi bằng một trong các chuỗi sau.

>>> 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']
36,
>>> 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']
37,
>>> 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']
38. Điều này có thể được sử dụng để đưa ra một ngoại lệ nếu gặp phải số JSON không hợp lệ

Nếu nghiêm ngặt là sai (_______33 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 ngữ cảnh này là những ký tự có mã ký tự trong phạm vi 0–31, bao gồm

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
04 (tab),
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
05,
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
06 và
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
07

Nếu dữ liệu đang được deserialized không phải là tài liệu JSON hợp lệ, thì a sẽ được nâng lên

Đã thay đổi trong phiên bản 3. 6. Tất cả các tham số hiện.

giải mã(s)

Trả về biểu diễn Python của s (một thể hiện chứa tài liệu JSON)

sẽ được nâng lên nếu tài liệu JSON đã cho không hợp lệ

raw_decode(s)

Giải mã tài liệu JSON từ s (bắt đầu bằng tài liệu JSON) và trả về 2 bộ 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ã tài liệu JSON từ một chuỗi có thể có dữ liệu không liên quan ở cuối

lớp json. Bộ mã hóa JSON(* , bỏ qua phím =Sai , ensure_ascii= True , check_circular=True , allow_nan=True , sort_keys=Sai , thụt lề =Không có , dấu phân cách= Không có , mặc định=Không có )

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

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

con trăn

JSON

mệnh lệnh

vật

danh sách, bộ

mảng

str

chuỗi

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

con số

Thật

thật

Sai

nói dối

Không có

vô giá trị

Đã thay đổi trong phiên bản 3. 4. Đã thêm hỗ trợ cho các lớp Enum có nguồn gốc int và float.

Để mở rộng điều này để nhận ra các đối tượng khác, hãy phân lớp và triển khai một phương thức với một phương thức khác trả về một đối tượng có thể tuần tự hóa cho

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
13 nếu có thể, nếu không, nó nên gọi triển khai siêu lớp (để nâng cao)

Nếu phím bỏ qua là sai (mặc định), a sẽ được nâng lên khi cố mã hóa các phím không phải là , hoặc

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6. Nếu phím bỏ qua là đúng, các mục đó chỉ bị bỏ qua

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

Nếu check_circular là true (mặc định), thì các danh sách, ký tự và các đối tượng được mã hóa tùy chỉnh sẽ được kiểm tra các tham chiếu vòng tròn trong quá trình mã hóa để ngăn chặn đệ quy vô hạn (điều này sẽ gây ra lỗi ). Mặt khác, không có kiểm tra như vậy diễn ra

Nếu allow_nan là true (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')
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')
3 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à giải mã dựa trên JavaScript. Nếu không, nó sẽ là một mã hóa nổi như vậy

Nếu sort_keys là true (mặc định.

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

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 đẹp với mức thụt lề đó. Mức thụt lề bằng 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')
4 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
}
6 (mặc định) chọn biểu diễn nhỏ gọn nhất. Sử dụng một số nguyên dương thụt lề nhiều khoảng trắng 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')
6), chuỗi đó được dùng để thụt lề mỗi cấp

Đã thay đổi trong phiên bản 3. 2. Cho phép thụt lề chuỗi bên cạnh số nguyên.

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

>>> 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. Giá trị 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')
8 nếu thụt lề là
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
6 và ngược lại là
>>> 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. Để 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', ']']
1 để loại bỏ khoảng trắng

Đã thay đổi trong phiên bản 3. 4. Sử dụng

>>> 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 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
}
6.

Nếu được chỉ định, mặc định phải là một hàm được gọi cho các đối tượng không 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 một. Nếu không được chỉ định, nó sẽ được nâng lên

Đã thay đổi trong phiên bản 3. 6. Tất cả các tham số hiện.

mặc định(o)

Triển khai phương thức này trong một lớp con sao cho nó trả về một đối tượng có thể tuần tự hóa cho o hoặc gọi triển khai cơ sở (để tăng a )

Ví dụ: để hỗ trợ các trình vòng lặp tùy ý, bạn có thể triển khai như thế này

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

mã hóa(o)

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

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

mã lặp(o)

Mã hóa đối tượng đã cho, o và tạo ra từng biểu diễn chuỗi nếu có. Ví dụ

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

ngoại lệ

ngoại lệ json. JSONDecodeError(tin nhắn , doc , tư thế)

Một lớp con của với các thuộc tính bổ sung sau

thông điệp

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

tài liệu

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

tư thế

Chỉ mục bắt đầu của tài liệu nơi phân tích cú pháp không thành công

lanh

Dòng tương ứng với pos

colno

Cột tương ứng với vị trí

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 nêu chi tiết mức độ tuân thủ của mô-đun này với RFC. Để đơn giản, các lớp con và các tham số khác với các tham số được đề cập rõ ràng, không được xem xét

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

  • Các giá trị số vô hạn và NaN được chấp nhận và xuất ra;

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

Vì RFC cho phép các 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 trình giải tuần tự của mô-đun này tuân thủ RFC về mặt kỹ thuật trong cài đặt mặc định

Mã hóa ký tự

RFC yêu cầu JSON đượ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 để có khả năng tương tác tối đa

Khi được RFC cho phép, mặc dù không bắt buộc, bộ nối tiếp của mô-đun này đặt ensure_ascii=True theo mặc định, do đó thoát khỏi đầu ra để các chuỗi kết quả chỉ chứa các ký tự ASCII

Khác với tham số ensure_ascii, mô-đun này được xác định nghiêm ngặt theo thuật ngữ chuyển đổi giữa các đối tượng Python và , và do đó không giải quyết trực tiếp vấn đề mã hóa ký tự

RFC cấm thêm dấu thứ tự byte (BOM) vào đầu văn bản JSON và bộ nối tiếp của 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, trình giải tuần tự JSON bỏ qua BOM ban đầu trong đầu vào của chúng. Trình giải tuần tự của mô-đun này tăng a khi có BOM ban đầu

RFC không cấm một cách rõ ràng các chuỗi JSON chứa các chuỗi byte không tương ứng với các ký tự Unicode hợp lệ (e. g. thay thế UTF-16 chưa ghép nối), nhưng có 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à xuất các điểm mã (khi có trong bản gốc) 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 số NaN. Mặc dù vậy, theo mặc định, mô-đun này chấp nhận và xuất 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')
2,
>>> 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 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')
1 như thể chúng là các giá trị chữ 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 serializer, tham số allow_nan có thể được sử dụng để thay đổi hành vi này. Trong trình giải nén, tham số parse_constant có thể được sử dụng để thay đổi hành vi này

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

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 phải xử lý các tên lặp lại trong các đối tượng JSON như thế nào. Theo mặc định, mô-đun này không đưa ra ngoại lệ;

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

Giá trị không phải đối tượng, không phải mảng cấp cao nhất

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à một đối tượng hoặc mảng JSON (Python hoặc ) và không được là giá trị chuỗi JSON, null, boolean, số hoặc chuỗi. RFC 7159 đã loại bỏ hạn chế đó và mô-đun này không và chưa bao giờ triển khai hạn chế đó trong bộ nối tiếp hoặc bộ giải tuần tự của nó

Bất kể, để có 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 trình giải nén JSON có thể đặt giới hạn cho

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

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

  • phạm vi và độ chính xác của các 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 ngoài giới hạn của chính các kiểu dữ liệu Python có liên quan hoặc của 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 bất kỳ hạn chế nào như vậy trong các ứng dụng có thể sử dụng JSON của bạn. Cụ thể, thông thường các số JSON được giải tuần tự hóa thành các số có độ chính xác kép IEEE 754 và do đó phải tuân theo các giới hạn về phạm vi và độ 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 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ạ" chẳng hạn như

Giao diện dòng lệnh

Mã nguồn. lib/json/công cụ. py


Mô-đun này cung cấp giao diện dòng lệnh đơn giản để xác thực và in các đối tượng JSON đẹp mắt

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}]'
54 và
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
55 tùy chọn không được chỉ định và 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 để sắp xếp đầu ra của từ điển theo thứ tự bảng chữ cái theo khóa.

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

tập tin

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

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

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

outfile

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

--sort-phím

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

--no-ensure-ascii

Tắt thoát các ký tự không phải mã ascii, xem để biết thêm thông tin

Mới trong phiên bản 3. 9

--json-dòng

Phân tích từng dòng đầu vào thành một đối tượng JSON riêng biệt

Mới trong phiên bản 3. 8

--thụt lề, --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

-h, --trợ giúp

Hiển thị thông báo trợ giúp

chú thích

Như đã lưu ý trong lỗi in cho RFC 7159, JSON cho phép các ký tự U+2028 (LINE SEPARATOR) và U+2029 (PARAGRAPH SEPARATOR) trong chuỗi, trong khi JavaScript (kể từ Phiên bản ECMAScript 5. 1) không

Làm cách nào để giải tuần tự hóa một từ điển trong Python?

Để deserialize chuỗi nhị phân được tạo bởi pickle. dumps() và tạo một đối tượng từ điển mới từ nó, sử dụng pickle. hàm loads() và chuyển biểu diễn chuỗi nhị phân được tuần tự hóa vào đó . Đầu ra là một đối tượng từ điển mới khác với từ điển chưa được xác thực ban đầu.

Trình giải nén trong Python là gì?

Deserialization là quá trình tái cấu trúc đối tượng từ luồng byte . Python đề cập đến quá trình tuần tự hóa và giải tuần tự hóa bằng các thuật ngữ tẩy và giải nén tương ứng.

Làm cách nào để xuất từ ​​điển bằng Python?

Bạn có thể lưu từ điển của mình vào tệp văn bản bằng mã bên dưới. .
# xác định chính tả
dict = { 'Trăn'. '. py', 'C++'. '. cpp', 'Java'. '. java'}
# mở tập tin để viết
# ghi tập tin
# đóng tệp

dict ={} trong Python là gì?

Cấu trúc bảng băm khóa/giá trị hiệu quả của Python được gọi là "dict". Nội dung của một dict có thể được viết dưới dạng một loạt các phím. cặp giá trị trong dấu ngoặc nhọn { }, e. g. chính tả = {key1. giá trị1, khóa2. giá trị2,. }. "Chính tả trống" chỉ là một cặp dấu ngoặc nhọn trống {}.