JSON ย่อมาจาก JavaScript Object Notation เป็นรูปแบบการแลกเปลี่ยนข้อมูลที่มีน้ำหนักเบา มันคล้ายกับผักดอง อย่างไรก็ตาม การทำให้เป็นอนุกรมของ pickle เป็น Python เฉพาะในขณะที่รูปแบบ JSON ถูกใช้งานในหลายภาษา โมดูล json ในไลบรารีมาตรฐานของ Python ใช้ฟังก์ชันการจัดลำดับวัตถุที่คล้ายกับโมดูล pickle และ marshal
เช่นเดียวกับในโมดูล pickle โมดูล json ยังมีฟังก์ชัน dumps() และ loads() สำหรับการทำให้เป็นอนุกรมของวัตถุ Python ลงในสตริงที่เข้ารหัส JSON และฟังก์ชัน dump() และ load() เขียนและอ่านวัตถุ Python ต่อเนื่องไปยัง/จากไฟล์
ดัมพ์()
ฟังก์ชันนี้แปลงวัตถุเป็นรูปแบบ JSON
โหลด()
ฟังก์ชันนี้จะแปลงสตริง JSON กลับไปเป็นอ็อบเจ็กต์ Python
ตัวอย่างต่อไปนี้จะสาธิตการใช้งานพื้นฐานของฟังก์ชันเหล่านี้
>>> import json >>> data=['Rakesh',{'marks':(50,60,70)}] >>> s=json.dumps(data) >>> s '["Rakesh", {"marks": [50, 60, 70]}]' >>> json.loads(s) ['Rakesh', {'marks': [50, 60, 70]}]
ฟังก์ชัน th dumps() สามารถใช้อาร์กิวเมนต์ sort_keys ที่เป็นตัวเลือก โดยค่าเริ่มต้นจะเป็นเท็จ หากตั้งค่าเป็น True ปุ่มพจนานุกรมจะปรากฏในลำดับการจัดเรียงในสตริง JSON
>>> data={"marks":50, "age":20, "rank":5} >>> s=json.dumps(data, sort_keys=True) >>> s '{"age": 20, "marks": 50, "rank": 5}' >>> json.loads(s) {'age': 20, 'marks': 50, 'rank': 5}
ฟังก์ชัน dumps() มีพารามิเตอร์ทางเลือกอื่นที่เรียกว่า indent ซึ่งใช้ตัวเลขเป็นค่า กำหนดความยาวของแต่ละส่วนของการแสดงรูปแบบสตริง json คล้ายกับเอาต์พุต pprint
>>> data = ['Rakesh',{'marks':(50,60,70)}] >>> s = json.dumps(data, indent=2) >>> print (s) [ "Rakesh",{ "marks": [ 50, 60, 70 ] } ]
โมดูล json ยังมี API เชิงวัตถุที่สอดคล้องกับฟังก์ชันด้านบน มีสองคลาสที่กำหนดไว้ในโมดูล – JSONEncoder และ JSONDecoder
คลาสตัวเข้ารหัส JSON
ออบเจ็กต์ของคลาสนี้คือตัวเข้ารหัสสำหรับโครงสร้างข้อมูล Python ประเภทข้อมูล Python แต่ละประเภทจะถูกแปลงเป็นประเภท JSON ที่สอดคล้องกันดังแสดงในตารางต่อไปนี้
Python | JSON |
---|---|
dict | วัตถุ |
รายการ ทูเพิล | array |
str | สตริง |
int, float, int- &float-derived Enums | หมายเลข |
จริง | จริง |
เท็จ | เท็จ |
ไม่มี | null |
คลาส JSONEncoder นั้นสร้างอินสแตนซ์โดยตัวสร้าง JSONEncoder() มีการกำหนดวิธีการที่สำคัญดังต่อไปนี้ในคลาสตัวเข้ารหัส
-
เข้ารหัส() − จัดลำดับวัตถุ Python ให้อยู่ในรูปแบบ JSON
-
iterencode() - เข้ารหัสวัตถุและส่งคืนตัววนซ้ำโดยให้รูปแบบการเข้ารหัสของแต่ละรายการในวัตถุ
-
เยื้อง − กำหนดระดับเยื้องของสตริงที่เข้ารหัส
-
sort_keys - เป็นจริงหรือเท็จเพื่อให้คีย์ปรากฏตามลำดับหรือไม่
-
Check_circular − หากเป็น True ให้ตรวจสอบการอ้างอิงแบบวงกลมในวัตถุประเภทคอนเทนเนอร์
ตัวอย่างต่อไปนี้เข้ารหัสวัตถุรายการ Python
>>> e=json.JSONEncoder() >>> e.encode(data) '["Rakesh", {"marks": [50, 60, 70]}]'
เมื่อใช้เมธอด iterencode() แต่ละส่วนของสตริงที่เข้ารหัสจะแสดงดังด้านล่าง
>>> for obj in e.iterencode(data): print (obj) [ "Rakesh" { "marks" : [ 50 , 60 , 70 ] } ]
คลาส JSONDEcoder
วัตถุของคลาสนี้ช่วยในการถอดรหัสในสตริง json กลับไปที่ Python data truture วิธีหลักในคลาสนี้คือ decode() โค้ดตัวอย่างต่อไปนี้ดึงวัตถุรายการ Python จากสตริงที่เข้ารหัสในขั้นตอนก่อนหน้า
>>> d=json.JSONDecoder() >>> d.decode(s) ['Rakesh', {'marks': [50, 60, 70]}]
JSON พร้อมไฟล์/สตรีม
โมดูล json กำหนดฟังก์ชัน load() และ dump() เพื่อเขียนข้อมูล JSON ไปยังไฟล์เช่นอ็อบเจกต์ ซึ่งอาจเป็นไฟล์ดิสก์หรือไบต์สตรีมและอ่านข้อมูลกลับมา
ดัมพ์()
ฟังก์ชันนี้เข้ารหัสข้อมูลอ็อบเจ็กต์ Python ในรูปแบบ JSON และเขียนลงในไฟล์ ไฟล์ต้องได้รับอนุญาตในการเขียน
>>> data=['Rakesh', {'marks': (50, 60, 70)}] >>> fp=open('json.txt','w') >>> json.dump(data,fp) >>> fp.close()
รหัสนี้จะสร้าง 'json.txt' ในไดเร็กทอรีปัจจุบัน โดยแสดงเนื้อหาดังนี้
["Rakesh", {"marks": [50, 60, 70]}]
โหลด()
ฟังก์ชันนี้โหลดข้อมูล JSON จากไฟล์และสร้างอ็อบเจ็กต์ Python จากไฟล์ ต้องเปิดไฟล์โดยได้รับอนุญาตในการอ่าน
>>> fp=open('json.txt','r') >>> ret=json.load(fp) >>> ret ['Rakesh', {'marks': [50, 60, 70]}] >>> fp.close()
บทความนี้ครอบคลุมถึงฟังก์ชันที่สำคัญในโมดูล json