Chỉ cần thêm một ví dụ đơn giản vào những gì mọi người đã giải thích,
json.load ()
json.load
có thể giải tuần tự hóa một tập tin, ví dụ như nó chấp nhận một file
đối tượng
# open a json file for reading and print content using json.load
with open("/xyz/json_data.json", "r") as content:
print(json.load(content))
sẽ đầu ra,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Nếu tôi sử dụng json.loads
để mở một tập tin thay thế,
# you cannot use json.loads on file object
with open("json_data.json", "r") as content:
print(json.loads(content))
Tôi sẽ nhận được lỗi này:
TypeError: chuỗi hoặc bộ đệm dự kiến
json.loads ()
json.loads()
chuỗi khử lưu huỳnh.
Vì vậy, để sử dụng, json.loads
tôi sẽ phải truyền nội dung của tệp bằng read()
hàm, ví dụ:
sử dụng content.read()
với json.loads()
nội dung trả về của tệp,
with open("json_data.json", "r") as content:
print(json.loads(content.read()))
Đầu ra,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Đó là bởi vì loại content.read()
là chuỗi, tức là<type 'str'>
Nếu tôi sử dụng json.load()
với content.read()
, tôi sẽ gặp lỗi,
with open("json_data.json", "r") as content:
print(json.load(content.read()))
Cho,
AttributionError: đối tượng 'str' không có thuộc tính 'read'
Vì vậy, bây giờ bạn biết json.load
tập tin json.loads
deserialze và deserialize một chuỗi.
Một vi dụ khac,
sys.stdin
file
Đối tượng trả về , vì vậy nếu tôi làm print(json.load(sys.stdin))
, tôi sẽ nhận được dữ liệu json thực tế,
cat json_data.json | ./test.py
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Nếu tôi muốn sử dụng json.loads()
, tôi sẽ làm print(json.loads(sys.stdin.read()))
thay thế.
json.loads(s, *)
- Deserializes
(mộtstr
,bytes
hoặcbytearray
dụ chứa một tài liệu JSON) - docs.python.org/3.6/library/json.html