Hướng dẫn convert json to binary python - chuyển đổi json thành python nhị phân

Trong RFC https://www.rfc-editor.org/rfc/rfc7159, nó nói:

JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32

Thoạt nhìn, có vẻ như Python không thực sự tuân theo thông số kỹ thuật khi bạn lần đầu tiên nhìn vào điều này sau tất cả những gì nó có nghĩa là gì khi mã hóa một cái gì đó khi nó vẫn là chuỗi Python3 'str', tuy nhiên Python đang thực hiện một số mã hóa cho bạn. Thử cái này:

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'

Bạn có thể thấy rằng người Nhật đã được chuyển đổi thành lối thoát Unicode và chuỗi kết quả thực sự là ASCII, ngay cả khi đó vẫn là Python Str. Tôi không chắc làm thế nào để có được json.dumps () thực sự cung cấp cho bạn các chuỗi UTF -8 - cho mục đích tương tác - nếu bạn muốn chúng, tuy nhiên cho tất cả các mục đích thực tế, điều này đủ tốt cho hầu hết mọi người. Các nhân vật ở đó và sẽ được giải thích chính xác. Thật dễ dàng để có được nhị phân với:

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'

Và Python làm điều đúng khi tải lại:

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}

Nhưng nếu bạn không bận tâm đến mã hóa, tải () vẫn tìm ra những gì cần làm khi được cung cấp STR:

>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}

Python là - như mọi khi - cố gắng trở nên hữu ích nhất có thể trong việc tìm ra những gì bạn muốn và làm điều đó, nhưng điều này gây bối rối cho những người đào sâu hơn một chút, và mặc dù yêu Python với các bit tôi thông cảm với OP. Liệu loại hành vi 'hữu ích' này có đáng để nhầm lẫn hay không là một cuộc tranh luận sẽ nổi giận.

Đáng lưu ý rằng nếu điều tiếp theo được thực hiện với đầu ra là ghi vào một tệp, thì bạn chỉ có thể làm:

pathlib.Path("myfile.json").open("w").write(json_data)

Sau đó, bạn không cần nó nhị phân vì tệp được mở ở chế độ văn bản và mã hóa được thực hiện cho bạn.

Bước 2: Tạo tệp JSON. .... Lib/json/__init__.py


Bước 3: Cài đặt gói Pandas. ....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 ).

Bước 4: Chuyển đổi chuỗi JSON thành văn bản bằng Python ..

JSON Dump Python là gì?

Phương thức Dump () được sử dụng khi các đối tượng Python phải được lưu trữ trong một tệp. Các bãi () được sử dụng khi các đối tượng được yêu cầu ở định dạng chuỗi và được sử dụng để phân tích cú pháp, in, v.v. Dump () cần tên tệp JSON trong đó đầu ra phải được lưu trữ dưới dạng đối số.

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

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

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

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

Cảnh báo

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

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.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
['foo', {'bar': ['baz', None, 1.0, 2]}]
>>> json.loads('"\\"foo\\bar"')
'"foo\x08ar'
>>> from io import StringIO
>>> io = StringIO('["streaming API"]')
>>> json.load(io)
['streaming API']

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
0 hiển thị API quen thuộc với người dùng của thư viện tiêu chuẩn
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
1 và
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
2.

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
0

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

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
1

Mã hóa nhỏ gọn:

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
2

In đẹp:Command Line Interface for detailed documentation.

Giải mã JSON:

Chuyên giải mã đối tượng JSON:

Ghi chú

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

json.dump (obj, fp, *, skipKeys = false, đảm bảo_ascii = true, kiểm tra_circular = true ¶dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

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 ____ 25 hỗ trợ) bằng cách sử dụng bảng chuyển đổi này.file-like object) using this conversion table.

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

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
6), thì các khóa Dict không thuộc loại cơ bản (
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7,
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
8,
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
9,
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
0,
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1) sẽ bị bỏ qua thay vì tăng
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
2.

Mô -đun

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
0 luôn tạo các đối tượng
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7, không phải đối tượng
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
5. Do đó,
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
6 phải hỗ trợ đầu vào
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7.

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:

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
8), 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
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
9 (hoặc tệ hơn).

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

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
8), thì đó sẽ là một
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
1 để tuần tự hóa ra khỏi phạm vi
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
9 giá trị (
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
3,
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
4,
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
5) trong việc 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 (
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
6,
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
7,
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
8) 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

>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
9 sẽ chỉ chèn các dòng mới.
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1 (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ư
pathlib.Path("myfile.json").open("w").write(json_data)
1), 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ộ

pathlib.Path("myfile.json").open("w").write(json_data)
2. Mặc định là
pathlib.Path("myfile.json").open("w").write(json_data)
3 nếu thụt lề là
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1 và
pathlib.Path("myfile.json").open("w").write(json_data)
5 nếu không. Để có được biểu diễn JSON nhỏ gọn nhất, bạn nên chỉ định
pathlib.Path("myfile.json").open("w").write(json_data)
6 để loại bỏ khoảng trắng.

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

pathlib.Path("myfile.json").open("w").write(json_data)
5 làm mặc định nếu thụt lề không
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1.Use
pathlib.Path("myfile.json").open("w").write(json_data)
5 as default if indent is not
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1.

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

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
2. Nếu không được chỉ định,
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
2 được nâng lên.

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

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
6), 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 ____23 (ví dụ: một lớp ghi đè phương thức

>>> 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"]'
3 để tuần tự hóa các loại bổ sung), chỉ định nó với CLS KWARG; nếu không
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
3 được sử dụng.

Đã 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.

Ghi chú

Không giống như

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
2 và
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
1, JSON không phải là một giao thức đóng khung, vì vậy cố gắng tuần tự hóa nhiều đối tượng với các cuộc gọi lặp lại đế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"]'
7 bằng cách sử dụng cùng một FP sẽ dẫn đến một tệp JSON không hợp lệ.

json.dumps (obj, *, skipKeys = false, đảm bảo_ascii = true, check_circular = truedumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

Nối tiếp obj thành một JSON được định dạng

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7 bằng cách sử dụng bảng chuyển đổi này. Các đối số có ý nghĩa tương tự như trong
>>> 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"]'
7.conversion table. The arguments have the same meaning as in
>>> 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"]'
7.

Ghi chú

Các khóa trong các cặp khóa/giá trị của JSON luôn thuộc loại

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7. 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 đều bị ép buộc thành các chuỗi. Kết quả của điều này, nếu một từ điển được chuyển đổi thành JSON và sau đó trở lại từ điển, từ điển có thể không bằng từ gốc. Đó là,
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
1 nếu X có các phím không chuỗi.

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

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
3). Giá trị trả về của Object_hook sẽ được sử dụng thay vì
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
3. 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ì

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

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
6. Đ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ụ:
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
7).

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.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
8. Đ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ụ:
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
9).

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

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
0 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
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
0 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:

>>> 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. Đ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 một lớp con tùy chỉnh ____84, chỉ định nó với

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
5 kwarg; Nếu không
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
4 đượ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ệ, thì

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
7 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

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7,
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
5 hoặc
>>> 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 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

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

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

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
7 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

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
5 or
>>> 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. 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
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7,
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
5 hoặc
>>> 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 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

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

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

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
5 hoặc
>>> 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. 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

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
6. Đ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ụ:
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
7).

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.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
8. Đ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ụ:
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
9).

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

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

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

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
7 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 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.(s)

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

Deserialize S (A

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7,
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
5 hoặc
>>> 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 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.

Các đối số khác có ý nghĩa tương tự như trong
>>> 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.
(s)

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

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
5 hoặc
>>> 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. Mã hóa đầu vào phải là UTF-8, UTF-16 hoặc UTF-32.

Đ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
>>> 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"]'
3 với một phương thức khác trả về một đối tượng có thể nối tiếp cho
>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
18 nếu có thể, nếu không, nó nên gọi việc triển khai siêu lớp (để tăng
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
2).

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

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
2 sẽ được nâng lên khi cố gắng mã hóa các khóa không phải là
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7,
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
8,
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
9 hoặc
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1. 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

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
9). 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ì

>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
6,
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
7 và
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
8 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
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
1 để mã hóa những chiếc phao như vậy.

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

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
6), 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

>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
9 sẽ chỉ chèn các dòng mới.
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1 (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ư
pathlib.Path("myfile.json").open("w").write(json_data)
1), 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ộ

pathlib.Path("myfile.json").open("w").write(json_data)
2. Mặc định là
pathlib.Path("myfile.json").open("w").write(json_data)
3 nếu thụt lề là
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1 và
pathlib.Path("myfile.json").open("w").write(json_data)
5 nếu không. Để có được biểu diễn JSON nhỏ gọn nhất, bạn nên chỉ định
pathlib.Path("myfile.json").open("w").write(json_data)
6 để loại bỏ khoảng trắng.

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

pathlib.Path("myfile.json").open("w").write(json_data)
5 làm mặc định nếu thụt lề không
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1.Use
pathlib.Path("myfile.json").open("w").write(json_data)
5 as default if indent is not
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
1.

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

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
2. Nếu không được chỉ định,
>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
2 đượ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

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
2).

Ví dụ: để hỗ trợ các trình lặp tùy ý, bạn có thể thực hiệ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"]'
3 như thế này:

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
3

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.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
4

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

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
5

Ngoại lệ ha

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

Lớp con của

>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
1 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

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
3 và
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
4 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,
>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
3 and
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}
4 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à

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
48, 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

>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
1 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ã

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
7) 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

>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
7,
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
8 và
>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
6 như thể chúng là các giá trị theo nghĩa đen số JSON hợp lệ:

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
6

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:

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
7

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

>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
3 hoặc
>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
55) 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
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
3 or
>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
55), 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

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
8 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ư
>>> import json
>>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'
7.

Giao diện dòng lệnh

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


Mô-đun

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
4 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ố

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
59 và
>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
60 tùy chọn không được chỉ định,
>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
61 và
>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
62 sẽ được sử dụng tương ứng:

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
8

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

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
63 để 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
>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
63 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á:

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
9

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

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
61.

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

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
62.

.

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

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
66 để 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

Hiển thị tin nhắn trợ giúp.

Chú thích

1

Như đã lưu ý trong ERRATA cho RFC 7159, JSON cho phép các ký tự U+2028 (phân tách dòng) và U+2029 (phân tách đoạn văn) trong các chuỗi, trong khi JavaScript (theo phiên bản ECMAScript 5.1) thì không.

JSON có thể là nhị phân?

Định dạng JSON nguyên bản không hỗ trợ dữ liệu nhị phân. Dữ liệu nhị phân phải được thoát ra để có thể đặt vào một phần tử chuỗi (nghĩa là số 0 hoặc nhiều ký tự unicode trong các trích dẫn kép bằng cách sử dụng đường thoát hiểm) trong JSON. Một phương pháp rõ ràng để thoát dữ liệu nhị phân là sử dụng Base64.. The binary data has to be escaped so that it can be placed into a string element (i.e. zero or more Unicode chars in double quotes using backslash escapes) in JSON. An obvious method to escape binary data is to use Base64.

Làm cách nào để giải mã dữ liệu JSON trong Python?

Parse JSON - Chuyển đổi từ JSON sang Python Nếu bạn có chuỗi JSON, bạn có thể phân tích nó bằng cách sử dụng phương thức json.Loads ().Kết quả sẽ là một từ điển Python.If you have a JSON string, you can parse it by using the json.loads() method. The result will be a Python dictionary.

Làm cách nào để chuyển đổi tệp JSON thành Python?

Cách chuyển đổi chuỗi JSON thành tệp văn bản bằng Python..
Bước 1: Chuẩn bị chuỗi JSON.Hãy xem lại một ví dụ đơn giản, trong đó chúng tôi sẽ tạo một chuỗi JSON dựa trên dữ liệu bên dưới: ....
Bước 2: Tạo tệp JSON.....
Bước 3: Cài đặt gói Pandas.....
Bước 4: Chuyển đổi chuỗi JSON thành văn bản bằng Python ..

JSON Dump Python là gì?

Phương thức Dump () được sử dụng khi các đối tượng Python phải được lưu trữ trong một tệp.Các bãi () được sử dụng khi các đối tượng được yêu cầu ở định dạng chuỗi và được sử dụng để phân tích cú pháp, in, v.v.Dump () cần tên tệp JSON trong đó đầu ra phải được lưu trữ dưới dạng đối số.used when the Python objects have to be stored in a file. The dumps() is used when the objects are required to be in string format and is used for parsing, printing, etc, . The dump() needs the json file name in which the output has to be stored as an argument.