เพียงแค่เพิ่มตัวอย่างง่ายๆให้กับสิ่งที่ทุกคนอธิบาย
json.load ()
json.load
สามารถดีซีเรียลไลซ์ไฟล์ได้เองเช่นยอมรับfile
วัตถุเช่น
# 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))
เอาท์พุทพินัยกรรม
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
ถ้าฉันใช้json.loads
เพื่อเปิดไฟล์แทน
# you cannot use json.loads on file object
with open("json_data.json", "r") as content:
print(json.loads(content))
ฉันจะได้รับข้อผิดพลาดนี้:
TypeError: คาดว่าสตริงหรือบัฟเฟอร์
json.loads ()
json.loads()
ยกเลิกการ deserialize สตริง
ดังนั้นเพื่อที่จะใช้json.loads
ฉันจะต้องผ่านเนื้อหาของไฟล์โดยใช้read()
ฟังก์ชั่นเช่น
ใช้content.read()
กับjson.loads()
เนื้อหาที่ส่งคืนของไฟล์
with open("json_data.json", "r") as content:
print(json.loads(content.read()))
เอาท์พุท
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
นั่นเป็นเพราะชนิดของcontent.read()
คือสตริงคือ<type 'str'>
ถ้าฉันใช้json.load()
กับcontent.read()
ฉันจะได้รับข้อผิดพลาด
with open("json_data.json", "r") as content:
print(json.load(content.read()))
ให้,
AttributeError: 'STR' วัตถุไม่มีแอตทริบิวต์ 'อ่าน'
ดังนั้นตอนนี้คุณรู้จักjson.load
ไฟล์json.loads
deserialze และทำการดีซีเรียลไลซ์สตริง
ตัวอย่างอื่น,
sys.stdin
ส่งคืนfile
ออบเจ็กต์ดังนั้นถ้าฉันทำprint(json.load(sys.stdin))
ฉันจะได้รับข้อมูล json จริง
cat json_data.json | ./test.py
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
ถ้าฉันต้องการใช้json.loads()
ฉันจะทำprint(json.loads(sys.stdin.read()))
แทน
json.loads(s, *)
- deserializes
(กstr
,bytes
หรือbytearray
อินสแตนซ์ที่มีเอกสาร JSON) - docs.python.org/3.6/library/json.html