Python Data Persistence - โมดูล JSON
JSON ย่อมาจาก JavaScript Object Notation. เป็นรูปแบบการแลกเปลี่ยนข้อมูลที่มีน้ำหนักเบา เป็นรูปแบบข้อความที่ไม่ขึ้นกับภาษาและข้ามแพลตฟอร์มรองรับภาษาโปรแกรมหลายภาษา รูปแบบนี้ใช้สำหรับการแลกเปลี่ยนข้อมูลระหว่างเว็บเซิร์ฟเวอร์และไคลเอนต์
รูปแบบ JSON คล้ายกับผักดอง อย่างไรก็ตามการทำให้เป็นอนุกรมของดองเป็นแบบเฉพาะของ Python ในขณะที่รูปแบบ JSON ถูกนำไปใช้ในหลายภาษาจึงกลายเป็นมาตรฐานสากล การทำงานและส่วนต่อประสานของโมดูล json ในไลบรารีมาตรฐานของ Python นั้นคล้ายกับโมดูลดองและมาร์แชล
เช่นเดียวกับในโมดูลดองโมดูล json ก็มีให้เช่นกัน dumps() และ loads() ฟังก์ชันสำหรับการทำให้เป็นอนุกรมของวัตถุ Python เป็นสตริงที่เข้ารหัส JSON และ dump() และ load() ฟังก์ชันเขียนและอ่านอ็อบเจกต์ Python แบบอนุกรมไปยัง / จากไฟล์
dumps() - ฟังก์ชันนี้จะแปลงวัตถุเป็นรูปแบบ JSON
loads() - ฟังก์ชันนี้จะแปลงสตริง JSON กลับเป็น Python object
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งานพื้นฐานของฟังก์ชันเหล่านี้ -
import json
data=['Rakesh',{'marks':(50,60,70)}]
s=json.dumps(data)
json.loads(s)
ฟังก์ชัน dumps () สามารถใช้อาร์กิวเมนต์ sort_keys ที่เป็นทางเลือก โดยค่าเริ่มต้นจะเป็นเท็จ หากตั้งค่าเป็น True คีย์พจนานุกรมจะปรากฏตามลำดับที่จัดเรียงในสตริง JSON
ฟังก์ชัน dumps () มีพารามิเตอร์ทางเลือกอื่นที่เรียกว่าการเยื้องซึ่งใช้ตัวเลขเป็นค่า กำหนดความยาวของแต่ละส่วนของการจัดรูปแบบของสตริง json ซึ่งคล้ายกับเอาต์พุตการพิมพ์
โมดูล json ยังมี API เชิงวัตถุที่สอดคล้องกับฟังก์ชันข้างต้น มีสองคลาสที่กำหนดไว้ในโมดูล - JSONEncoder และ JSONDecoder
คลาส JSONEncoder
ออบเจ็กต์ของคลาสนี้คือตัวเข้ารหัสสำหรับโครงสร้างข้อมูล Python ข้อมูล Python แต่ละประเภทจะถูกแปลงเป็นประเภท JSON ที่สอดคล้องกันดังแสดงในตารางต่อไปนี้ -
Python | JSON |
---|---|
Dict | วัตถุ |
รายการทูเพิล | อาร์เรย์ |
Str | สตริง |
int, float, int- และลอยได้มา Enums | จำนวน |
จริง | จริง |
เท็จ | เท็จ |
ไม่มี | โมฆะ |
คลาส JSONEncoder สร้างอินสแตนซ์โดยตัวสร้าง JSONEncoder () วิธีการที่สำคัญต่อไปนี้ถูกกำหนดไว้ในคลาสตัวเข้ารหัส -
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 |
encode() ทำให้ออบเจ็กต์ Python เป็นอนุกรมในรูปแบบ JSON |
2 |
iterencode() เข้ารหัสอ็อบเจ็กต์และส่งคืนตัวทำซ้ำที่ให้รูปแบบการเข้ารหัสของแต่ละไอเท็มในอ็อบเจ็กต์ |
3 |
indent กำหนดระดับการเยื้องของสตริงที่เข้ารหัส |
4 |
sort_keys เป็นจริงหรือเท็จเพื่อให้คีย์ปรากฏตามลำดับที่เรียงหรือไม่ |
5 |
Check_circular ถ้าเป็นจริงให้ตรวจสอบการอ้างอิงแบบวงกลมในออบเจ็กต์ประเภทคอนเทนเนอร์ |
ตัวอย่างต่อไปนี้เข้ารหัสวัตถุรายการ Python
e=json.JSONEncoder()
e.encode(data)
คลาส JSONDecoder
ออบเจ็กต์ของคลาสนี้ช่วยในการถอดรหัสในสตริง json กลับไปที่โครงสร้างข้อมูล Python เมธอดหลักในคลาสนี้คือถอดรหัส () โค้ดตัวอย่างต่อไปนี้ดึงข้อมูลรายการ Python จากสตริงที่เข้ารหัสในขั้นตอนก่อนหน้า
d=json.JSONDecoder()
d.decode(s)
โมดูล json กำหนด load() และ dump() ฟังก์ชั่นในการเขียนข้อมูล JSON ไปยังไฟล์เช่นอ็อบเจ็กต์ซึ่งอาจเป็นไฟล์ดิสก์หรือสตรีมไบต์และอ่านข้อมูลจากไฟล์เหล่านั้น
ถ่ายโอนข้อมูล ()
ฟังก์ชันนี้เขียนข้อมูลวัตถุ JSONed Python ไปยังไฟล์ ต้องเปิดไฟล์ด้วยโหมด 'w'
import 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 จากมัน ไฟล์ต้องเปิดโดยได้รับอนุญาตให้อ่าน (ควรมีโหมด 'r')
Example
fp=open('json.txt','r')
ret=json.load(fp)
print (ret)
fp.close()
Output
['Rakesh', {'marks': [50, 60, 70]}]
json.tool โมดูลยังมีอินเทอร์เฟซบรรทัดคำสั่งที่ตรวจสอบความถูกต้องของข้อมูลในไฟล์และพิมพ์ออบเจ็กต์ JSON ในรูปแบบที่สวยงาม
C:\python37>python -m json.tool json.txt
[
"Rakesh",
{
"marks": [
50,
60,
70
]
}
]