เพียงแค่เพิ่มตัวอย่างง่ายๆให้กับสิ่งที่ทุกคนอธิบาย
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.loadsdeserialze และทำการดีซีเรียลไลซ์สตริง
ตัวอย่างอื่น,
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