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.loadcó 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.loadstô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.loadtập tin json.loadsdeserialze và deserialize một chuỗi.
Một vi dụ khac,
sys.stdinfileĐố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,byteshoặcbytearraydụ chứa một tài liệu JSON) - docs.python.org/3.6/library/json.html